原生js实现焦点轮播图效果

实现焦点轮播图效果的完整攻略包含以下几个步骤:

步骤一:HTML结构代码搭建

我们需要先创建HTML结构代码。-html代码的结构分为两部分。一是包含轮播图内容的ul标签,二是包含焦点图点点的ol标签。代码如下:

<div class="slider">
  <ul class="slides">
    <li><img src="图片1"></li>
    <li><img src="图片2"></li>
    <li><img src="图片3"></li>
    ...
  </ul>
  <ol class="dots">
    <li></li>
    <li></li>
    <li></li>
    ...
  </ol>
</div>

其中,class为slider的div标签是为了整个轮播图的CSS布局设立的。

步骤二:CSS样式代码编写

在两个标签的HTML结构搭建完成之后,我们要为其编写CSS样式。我们需要将图片轮播的区域设置为图片所在li标签的宽度和高度,用CSS实现轮播图的自适应宽度和高度。

.slider {
  position: relative;
  height: 400px; /* 轮播图高度自己设定,为了方便,我们设定为400px */
  overflow: hidden;
  white-space: nowrap; /* li标签横向排列 */
}
.slider .slides {
  position: relative;
  height: 100%;
  width: 10000px;
  left: 0;
  -webkit-transition: left .5s;
  transition: left .5s; /* 添加过渡效果 */
}
.slider .slides li {
  display: inline-block;
  width: 100%;
  height: 100%;
  vertical-align: top;
}

上述代码主要是设置轮播图的CSS样式并将li标签设置为inline-block横向排列。

步骤三:JS代码编写

在第一步和第二步完成之后,我们需要编写Javascript来控制轮播图效果。我们需先把所有图片都放在一个数组中,再控制轮播图每次播放的位置及轮播点的切换。

window.onload = function () {
  var slider = document.querySelector('.slider');
  var slides = document.querySelector('.slides').querySelectorAll('li');
  var dots = document.querySelector('.dots');
  var index = 0;
  // 获取slide li标签的数量
  var len = slides.length;
  // 定时器对象
  var timer = null;

  // 循环向ol中添加li标签作为轮播图点点
  for (var i = 0; i < len; i++) {
    var li = document.createElement('li');
    li.index = i;
    dots.appendChild(li);
  }

  // 焦点图点点样式设置
  dots.style.marginTop = -dots.offsetHeight/2 + 'px';
  dots.children[index].className = 'active';

  // 克隆第一张图片及最后一张图片
  var firstSlid = slides[0].cloneNode(true);
  var lastSlid = slides[len-1].cloneNode(true);
  document.querySelector('.slides').appendChild(firstSlid);
  document.querySelector('.slides').insertBefore(lastSlid,slides[0]);

  // 为每个点点设置鼠标移入事件
  for (var i = 0; i < dots.children.length; i++) {
    dots.children[i].onmouseover = function () {
      clearInterval(timer);
      // 排除当前图片
      if (this.index != index) {
        index = this.index;
        switchSlide(index);
        switchActive(index);
      }
      timer = setInterval(auto,2000);
    }
  }

  // 自动轮播和点点切换
  function auto() {
    index++;
    switchSlide(index);
    switchActive(index);
  }

  // 切换图片位置
  function switchSlide(index) {
    slides[0].style.marginLeft = -slides[0].offsetWidth*index+'px';
    slider.querySelector('.slides').style.transform = 'translateX('+((-index-1)/len*100)+'%)';
  }

  // 切换点点的样式
  function switchActive(index) {
    for (var i = 0; i < dots.children.length; i++) {
      dots.children[i].className = '';
    }
    dots.children[index].className = 'active';
  }

  // 触碰到slider调用stopPlay
  slider.onmouseenter = stopPlay;
  // 移出slider调用startPlay
  slider.onmouseleave = startPlay;

  // 停止播放
  function stopPlay() {
    clearInterval(timer);
  }
  // 开始播放
  function startPlay() {
    timer = setInterval(auto,2000);
  }
  // 设置定时器
  startPlay();
}

代码中我们获取整个slider的HTML元素和通过通过获取其子元素来控制每张幻灯片的位置。在自动播放的过程中,通过设置setTimeout函数来实现每隔一定时间切换轮播图。同时,在鼠标移上去停止播放,离开的时候重新开始播放。

示例一

参考链接:codesandbox

示例二

参考链接:codesandbox

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现焦点轮播图效果 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 前端jquery部分很精彩

    前端jquery部分很精彩,是因为它为前端开发带来了很多优秀的库和插件,可以快速地实现很多功能,节省了很多时间和精力。同时,jQuery还具有很好的兼容性,能够兼容各种浏览器。在实际项目中,正是由于jQuery的使用,实现了很多复杂的功能。 下面以两个具体的示例来说明: 1. 图片懒加载 图片懒加载是一种优化策略,可以显著提高网站性能。使用jQuery实现图…

    css 2023年6月9日
    00
  • 使用CSS3来实现滚动视差效果的教程

    使用CSS3来实现滚动视差效果的教程 滚动视差效果指在页面滚动时,背景和前景以不同的速度滚动,产生出迷人的视觉效果。在CSS3中,可以使用一些属性和技巧来实现滚动视差效果。本文将详细讲解如何使用CSS3来实现滚动视差效果。 第一步:CSS的准备 在HTML文件中,可以通过<link>标签将CSS文件引入。在CSS文件中,需要先设置body和htm…

    css 2023年6月10日
    00
  • IE和Firefox在JavaScript应用中的兼容性探讨

    IE和Firefox在JavaScript应用中的兼容性探讨 JavaScript是前端开发常用的编程语言之一,在不同的浏览器中,JavaScript的表现也会有所不同。本文将对IE和Firefox在JavaScript应用中的兼容性问题进行探讨,帮助开发者更好地处理这些问题。 常见的IE和Firefox兼容性问题 1. DOM API兼容性 在处理DOM元…

    css 2023年6月10日
    00
  • jQuery实现可以编辑的表格实例详解【附demo源码下载】

    下面是针对“jQuery实现可以编辑的表格实例详解【附demo源码下载】”这篇文章的完整攻略: 文章概述 这篇文章主要介绍了如何使用jQuery实现一个可以编辑的表格,并提供了对应的示例代码,帮助读者快速理解实现过程。文章主要分为以下几个部分: jQuery实现表格通用编辑功能 自定义编辑控件 编辑后保存数据 jQuery实现表格通用编辑功能 文章首先介绍了…

    css 2023年6月10日
    00
  • css中text-overflow属性与文本截断详解

    CSS中的text-overflow属性可以用来控制文本溢出时的表现形式,常见的表现形式包括省略号(…)和忽略。 text-overflow的使用方法 text-overflow属性的使用方法如下: text-overflow: clip|ellipsis|required|string|initial|inherit; 常用的属性值包括: clip:默…

    css 2023年6月10日
    00
  • jQuery插件实现带圆点的焦点图片轮播切换

    实现带圆点的焦点图片轮播切换的关键在于利用jQuery插件来实现,以下是实现的详细攻略: 步骤一,编写HTML结构 首先,需要编写HTML结构,包括轮播图图片和对应的圆点: <div class="slider"> <ul class="slider-list"> <li><i…

    css 2023年6月11日
    00
  • 使用CSS属性选择器来拼接HTML的DNA的方法

    使用CSS属性选择器来拼接HTML的DNA可以帮助我们高效地生成具有相似结构的HTML代码,从而提高开发效率。下面是具体的步骤: 1. 确定HTML的结构和规范 在使用CSS属性选择器来拼接HTML的DNA之前,我们需要先确定HTML的结构和规范。特别是在确定公共的父元素之后,我们可以使用CSS属性选择器来定位子元素并自动生成HTML代码。 2. 使用CSS…

    css 2023年6月10日
    00
  • css 关于空白叠加

    CSS中的空白叠加(Margin Collapse)通常是指当相邻的两个元素之间存在空白(margin/padding/border)时,它们之间的空白会按照一定规则合并,而不是简单地叠加。 通常情况下,当两个同级元素上下相邻时,它们之间的垂直方向的外边距会合并,结果等于两个外边距中的较大值。但有一些情况下,外边距不会进行合并。 现在,我们来看两个不同的示例…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部