原生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实现百度新闻导航菜单滑动动画的攻略: 一、设计导航菜单结构 首先,需要在HTML中设计出导航菜单的结构。具体而言,我们需要使用HTML <ul> 与 <li> 标签来实现导航菜单,并设置相应样式。 示例代码: <ul class="nav-menu"> <li class=&…

    css 2023年6月9日
    00
  • 详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现

    下面我将详细讲解一下“详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现”的完整攻略。 1. 背景和问题 在微信小程序中,我们经常使用 scroll-view 组件来实现滚动效果,常见的有垂直和水平两种方向的滚动。但是,在实际开发中,我们会发现横向滚动的实现还是有些坑点的,例如: 当 scroll-view 中存在表单元素(如 inp…

    css 2023年6月10日
    00
  • 最常用和实用的CSS技巧

    最常用和实用的CSS技巧 CSS是定义网页样式的重要语言之一。以下是最常用和实用的CSS技巧: 选择器 选择器可以很精确地选中HTML元素。以下是几个选择器: 类选择器 类选择器选中HTML中类名为某个值的元素。类选择器以点号表示。以下示例定义了一个类选择器,它将文本颜色设置为蓝色: .blue-text { color: blue; } ID选择器 ID选…

    css 2023年6月9日
    00
  • 百度空间的popup效果分析第2/3页

    标题:百度空间的popup效果分析第2/3页 介绍:在百度空间中,当用户点击某个内容时,会弹出一个浮层,展示更多相关内容。这种浮层效果被称为popup效果。本文将详细分析百度空间的popup效果,并提供完整的攻略指南。 什么是popup效果? popup效果指的是浮层效果,常见于网页中。它的特点是悬浮在所点击的内容上方,通常用于实现以下功能: 弹出更多相关内…

    css 2023年6月10日
    00
  • 纯CSS制作各种各样的网页图标(三角形、暂停按钮、下载箭头、加号等)

    那我来为您详细讲解纯CSS制作各种各样的网页图标的完整攻略。 简介 CSS是一种强大的样式语言,可以用来为网站添加各种复杂和简单的效果,其中包括网页图标。使用CSS制作网页图标的好处是可以减少对图像的依赖,并且减少页面加载时间。这个过程中一般使用伪元素和CSS属性来控制样式。 纯CSS制作三角形 制作三角形可以用CSS的border属性,将三角形看做一个小数…

    css 2023年6月10日
    00
  • CSS教程:导致一些问题的overflow

    CSS教程:导致一些问题的overflow 在CSS中,overflow属性被用于确定容器应如何处理溢出内容。当容器内的内容超出容器的尺寸时,该属性的值将决定用户是否可以滚动内容,或隐藏超出的部分。 然而,overflow属性可能导致一些问题。在本教程中,我们将介绍这些问题以及如何解决它们。 问题1: 块剪切 overflow:hidden属性可能导致内容被…

    css 2023年6月9日
    00
  • c# 爬取优酷电影信息(2)

    让我来为您详细讲解 “c# 爬取优酷电影信息(2)” 的完整攻略。 攻略概述: 本攻略将介绍如何使用 c# 爬取优酷电影信息。我们将使用 HttpClient 来发送 GET 请求,获取电影页面的 HTML 内容。然后,使用 HtmlAgilityPack 解析 HTML 内容,从而提取电影信息。最后,我们将使用 Console.WriteLine() 函数…

    css 2023年6月10日
    00
  • css设置多列等高布局的方法示例

    下面是CSS设置多列等高布局的攻略: 1. 使用flexbox布局 flexbox是一种强大的CSS布局模式,可以帮助实现多列等高布局。 首先需要在容器上设置display: flex;属性,然后对子元素设置flex-grow: 1;属性,这样就可以让所有子元素高度相等。如果需要控制子元素高度不会无限增长,可以设置flex-basis属性来限制子元素的基础尺…

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