原生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日

相关文章

  • 从零搭建react+ts组件库(封装antd)的详细过程

    下面是从零搭建react+ts组件库(封装antd)的详细过程: 第一步:初始化项目 首先,在命令行终端中执行以下命令,初始化一个空的npm项目: npm init -y 第二步:安装依赖 接着安装以下依赖: npm install react react-dom antd babel-loader @babel/core @babel/preset-env…

    css 2023年6月9日
    00
  • 学习CSS预处理器:Sass和less进行对比

    学习CSS预处理器:Sass和Less进行对比 本攻略旨在帮助初学者了解CSS预处理器,特别是Sass和Less这两个最流行的CSS预处理器。将会对比这两个预处理器的优劣点,以及体验它们所提供的一些特性。 什么是CSS预处理器 CSS预处理器可以将类似于CSS的代码转换为浏览器可读的文件。它们可以帮助你更快地编写CSS代码,增加代码的可读性和维护性,并使代码…

    css 2023年6月10日
    00
  • CSS中选择器的权重值的计算

    CSS中选择器的权重值是用来优化CSS的一个重要概念,当多个选择器对同一个元素设置不同的样式时,CSS会通过计算选择器的权重值来判断哪些样式具有更高的优先级。下面是CSS中选择器权重值计算的详细说明: 选择器的组成 首先,先了解一下选择器的组成。选择器由不同的部分组成,每个部分的优先级是不同的。这些部分按照优先级的高低依次为: 内联样式(优先级为1000) …

    css 2023年6月9日
    00
  • html中table为每个单元格设置不同颜色和宽度

    要在HTML中为每个单元格设置不同颜色和宽度,需要使用CSS。以下是详细的步骤: 第一步:创建HTML表格 在HTML中使用<table>标签创建表格,并使用<tr>标签创建每一行,<td>标签创建每个单元格。以下是一个简单的例子: <table> <tr> <td>Row 1, Cel…

    css 2023年6月9日
    00
  • 完全用CSS实现鼠标移动到图片并更换图片

    要完全用CSS实现鼠标移动到图片并更换图片,需要用到CSS的:hover选择器和background-image属性。 具体步骤如下: 准备两个需要交替的图片。例如,我们使用红色和蓝色两张图片作为示例,存放在项目文件夹中。 在HTML中创建一个div容器,并将其中一个图片作为背景图片设置。例如: <div class="image-conta…

    css 2023年6月10日
    00
  • Jquery实战_读书笔记2 选择器

    Jquery实战_读书笔记2 选择器 1. 选择器简介 在使用Jquery进行DOM操作的时候,首先需要获取操作的元素,而选择器就是用来获取元素的工具。选择器可以根据不同的条件进行筛选,选择我们需要的元素。 Jquery中支持多种选择器:标签选择器、ID选择器、class选择器、属性选择器、伪类选择器、层次选择器等。 例如,我们可以使用ID选择器来选择页面中…

    css 2023年6月10日
    00
  • css布局教程之如何实现垂直居中

    在 CSS 布局中,实现垂直居中是一个常见的需求。本文将提供一些关于如何实现垂直居中的方法,包括使用 flexbox 和 transform 属性的示例说明。 使用 Flexbox Flexbox 是一种 CSS 布局模式,可以帮助开发者轻松地实现垂直居中。具体步骤如下: 将父元素的 display 属性设置为 flex。 将父元素的 justify-con…

    css 2023年5月18日
    00
  • XHTML教程,简单认识XHTML基础知识

    下面是“XHTML教程,简单认识XHTML基础知识”的完整攻略。 什么是XHTML? XHTML全称是可扩展超文本标记语言,是一种用于Web页面描述的标记语言。它目前被广泛使用于网络上,是最新的HTML发展标准。与HTML相比,XHTML更加严谨,更注重页面的结构和语义化。 XHTML的优点 相比传统的HTML,XHTML拥有以下优点: 严谨的语法规范,可以…

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