原生JS实现的轮播图功能详解

现在我来详细为你讲解“原生JS实现的轮播图功能详解”的完整攻略,内容如下:

确定结构

在开始实现轮播图之前,首先要确定轮播图的结构,建议采用以下结构:

<div class="carousel">
    <ul class="carousel-list">
        <li class="carousel-item"><img src="1.jpg"></li>
        <li class="carousel-item"><img src="2.jpg"></li>
        <li class="carousel-item"><img src="3.jpg"></li>
        <li class="carousel-item"><img src="4.jpg"></li>
        <li class="carousel-item"><img src="5.jpg"></li>
    </ul>
</div>

其中,.carousel用于包裹轮播图的容器,.carousel-list用于包裹轮播图的所有项(即li元素),.carousel-item用于表示每一个轮播图项。

CSS样式

在确定好结构后,再通过CSS样式来优化轮播图的显示效果和样式。

.carousel {
    position: relative;
    width: 100%;
    height: 500px;
    overflow: hidden;
}
.carousel-list {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 500px;
    list-style: none;
    margin: 0;
    padding: 0;
}
.carousel-item {
    float: left;
    width: 100%;
    height: 100%;
    text-align: center;
}
.carousel-item img {
    max-width: 100%;
    max-height: 100%;
}

上述样式主要用于定义容器和各个元素的排列和显示方式,同时为了保证在图片尺寸不同时也能够正常显示,加入了max-width和max-height属性。

JS实现

接下来是轮播图实现的重头戏,需要用到JavaScript来控制轮播图的自动播放和手动切换。

(function() {
    // 获取DOM元素
    var carousel = document.querySelector('.carousel');
    var list = document.querySelector('.carousel-list');
    var items = document.querySelectorAll('.carousel-item');
    var dots = []; // 圆点数组

    // 创建圆点
    for (var i = 0; i < items.length; i++) {
        var dot = document.createElement('span');
        dot.setAttribute('index', i); // 用于记录圆点对应轮播项的索引
        dot.className = 'dot';
        carousel.appendChild(dot);
        dots.push(dot);
    }

    var index = 0; // 当前轮播的项的索引
    var timer = null; // 定时器
    var interval = 3000; // 切换间隔

    // 定义切换函数
    function slideTo(newIndex) {
        // 先更新索引
        index = newIndex;

        // 在实现切换动画
        var offset = -index * items[0].offsetWidth;
        list.style.transform = 'translateX(' + offset + 'px)';

        // 更新圆点状态
        for (var i = 0; i < dots.length; i++) {
            dots[i].className = 'dot';
        }
        dots[index].className = 'dot active';
    }

    // 自动轮播函数
    function autoSlide() {
        clearInterval(timer);
        timer = setInterval(function() {
            index++;
            if (index >= items.length) {
                index = 0;
            }
            slideTo(index);
        }, interval);
    }

    // 前进和后退按钮
    var prev = document.querySelector('.prev');
    var next = document.querySelector('.next');
    prev.onclick = function() {
        index--;
        if (index < 0) {
            index = items.length - 1;
        }
        slideTo(index);
    };
    next.onclick = function() {
        index++;
        if (index >= items.length) {
            index = 0;
        }
        slideTo(index);
    };

    // 圆点点击事件
    for (var i = 0; i < dots.length; i++) {
        dots[i].onclick = function() {
            var newIndex = parseInt(this.getAttribute('index'));
            slideTo(newIndex);
        };
    }

    // 鼠标移到轮播图上时,停止自动播放
    carousel.onmouseover = function() {
        clearInterval(timer);
    };
    // 鼠标移出轮播图时,重新开始自动播放
    carousel.onmouseout = function() {
        autoSlide();
    };

    // 开始自动轮播
    autoSlide();
})();

上述JS代码主要实现了以下内容:

  1. 获取DOM元素,包括容器、轮播项、圆点等。
  2. 创建圆点数组,通过遍历轮播项的方式来创建。
  3. 定义slideTo函数用来切换轮播项,其中包括更新当前项索引、实现切换动画和更新圆点状态三部分。
  4. 定义autoSlide函数用来自动轮播,设置定时器,每隔一定时间调用slideTo函数。
  5. 给前进和后退按钮添加事件,通过修改当前项的索引调用slideTo函数实现。
  6. 给圆点添加点击事件,通过获取对应轮播项的索引调用slideTo函数实现。
  7. 给轮播图容器添加鼠标移入和移出事件,分别用来停止和开始自动轮播。
  8. 最后调用autoSlide函数开始轮播。

示例说明

下面给出两条轮播图示例说明:

示例一

假设有以下结构:

<div class="carousel">
    <ul class="carousel-list">
        <li class="carousel-item"><img src="1.jpg"></li>
        <li class="carousel-item"><img src="2.jpg"></li>
        <li class="carousel-item"><img src="3.jpg"></li>
    </ul>
    <span class="prev">Prev</span>
    <span class="next">Next</span>
</div>

此时需要在<head>标签中引入上述CSS样式和JS代码,即可实现一个左右切换的轮播图。

示例二

现在需要一个自动轮播的轮播图,并且需要添加圆点来表示当前显示的项。结构如下:

<div class="carousel">
    <ul class="carousel-list">
        <li class="carousel-item"><img src="1.jpg"></li>
        <li class="carousel-item"><img src="2.jpg"></li>
        <li class="carousel-item"><img src="3.jpg"></li>
    </ul>
</div>

此时可以采用上述CSS样式和JS代码,不过需要对其中的.prev.next样式进行修改,以便去掉前进和后退按钮。同时在JavaScript代码中不需要再设置前进和后退按钮的点击事件,而是通过创建圆点并添加点击事件实现切换。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现的轮播图功能详解 - Python技术站

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

相关文章

  • CSS3中Animation属性的使用详解

    CSS3中Animation属性的使用详解 CSS3中的Animation属性可以用来创建动画效果,通过设置关键帧和动画属性,可以实现各种各样的动画效果。本攻略将详细讲解Animation属性的使用方法,包括关键帧的设置、动画属性的设置、动画的应用等,并提供两个示例说明。 1. 关键帧的设置 关键帧是指动画中的关键点,可以通过设置关键帧来控制动画的变化。在C…

    css 2023年5月18日
    00
  • Query常用DIV操作获取和设置长度宽度的实现方法

    获取和设置元素的长度和宽度,是前端开发中经常需要涉及的操作。在 Query 中,可以通过 DIV 操作来实现。以下是该操作的具体攻略及两个示例说明: 1. 获取元素的长度和宽度 获取元素的长度和宽度,可以使用 width() 和 height() 方法。 width() 方法用于返回元素的宽度,包括 padding 和 border 的宽度,但不包括 mar…

    css 2023年6月10日
    00
  • 分享15个最佳的HTML/CSS设计和开发框架

    以下是“分享15个最佳的HTML/CSS设计和开发框架”的完整攻略。 概述 HTML/CSS设计和开发框架是一种可以减少前端开发时间的工具。这些框架可以提供可重用的HTML和CSS组件,从而大大提高了生产效率。在本攻略中,我们将分享15个最佳的HTML/CSS设计和开发框架,让你更快地开发响应式网站。 1. Bootstrap Bootstrap是最流行的开…

    css 2023年6月9日
    00
  • css3高级选择器使用方法

    下面是关于 “CSS3高级选择器使用方法” 的完整攻略。 1. 简介 CSS选择器是CSS规范中最基本的概念之一,它决定了一个元素应该如何被渲染。在 CSS3 中,新增了许多高级选择器,使得我们可以更精确地选取页面中的元素,从而提高我们的开发效率。 2. CSS3高级选择器 2.1 属性选择器 属性选择器是一种根据属性值来选择元素的CSS3选择器。常见的有下…

    css 2023年6月9日
    00
  • 举例讲解CSS的子元素选择器用法

    下面是讲解“举例讲解CSS的子元素选择器用法”的完整攻略: 什么是CSS的子元素选择器? CSS的子元素选择器可以让你选择元素树结构中的子元素。它可以帮助你精确地选择某个元素的直接子元素,而不选择该元素下的所有后代元素。 子元素选择器的语法 要使用CSS的子元素选择器,需使用“>”符号。以下是子元素选择器的语法: 父元素 > 子元素 { 属性: …

    css 2023年6月9日
    00
  • Jquery常用技巧收集整理篇

    Jquery常用技巧收集整理篇 Jquery 是一款非常流行的 JavaScript 库,它能够帮助开发人员更快速地操作 HTML 文档,实现动态效果和交互。在 Jquery 的使用中,有一些常用的技巧非常值得学习和掌握。 1. 使用选择器优化代码 Jquery 提供了非常强大的选择器功能,可以通过各种方式快速定位到需要操作的元素。在使用 Jquery 的过…

    css 2023年6月9日
    00
  • jquery对元素拖动排序示例

    jQuery对元素拖动排序是一种非常常用的功能,可以极大的增强网站的交互性和用户体验。下面我将详细讲解其实现的完整攻略,并且给出两个示例进行说明。 标准排序示例 首先,我们需要引入 jQuery 库,以及我们后续需要用到的插件库: <!– 引入jQuery库 –> <script src="https://cdn.bootcd…

    css 2023年6月10日
    00
  • CSS Viewport 单位 实现快速布局

    下面是关于“CSS Viewport 单位 实现快速布局”的完整攻略及示例说明。 什么是 CSS Viewport 单位? CSS Viewport 单位是相对于视口大小的长度单位,在样式表中可以用 vw、vh、vmin和vmax 来表示。其中,vw 表示视口宽度的百分之一,vh 表示视口高度的百分之一,vmin 表示视口宽度和高度中较小的值,vmax 则表…

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