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

相关文章

  • 利用边框border属性做小符号

    利用边框 border 属性可以轻松实现小符号的效果,以下是实现的详细攻略: 1. 设置边框长度为0 我们可以通过将边框长度设置为0来实现小符号的效果。在 Markdown 中,使用以下代码可以进行设置: – &#12288;&#12288;小符号1 – &#12288;&#12288;小符号2 输出的效果如下: 小符号1 小…

    css 2023年6月10日
    00
  • 原生js实现自定义滚动条组件

    下面我来详细讲解如何原生js实现自定义滚动条组件。 1. 确定组件需求 在实现自定义滚动条组件前,我们需要先确定组件的需求。一般来说,自定义滚动条组件需要具备以下功能: 拖动滑块来实现滚动; 点击轨道实现精准跳转; 自适应内容高度,并根据显示内容的变化而动态更新滚动条长度; 能够跨浏览器平台使用。 2. 组件结构设计 组件的结构设计需要包含以下元素: 一条轨…

    css 2023年6月10日
    00
  • 用CSS实现表单form布局

    下面是详细讲解“用CSS实现表单form布局”的完整攻略: 1. 分析布局结构 在实现表单的CSS布局之前,我们首先需要分析表单的布局结构。一般来说,表单的布局由以下几个部分组成: 表单元素的标签 表单元素的输入框或选项 表单元素的提示信息 在这些部分中,标签和输入框通常是一一对应的,而提示信息则需要根据表单元素的状态来变化。 2. 布局方法 有多种方法可以…

    css 2023年6月11日
    00
  • vue使用element-ui的el-date-picker设置样式无效的解决

    问题描述 在使用Vue框架中,我们经常会使用Element UI库来构建界面。其中el-date-picker是一个日期选择器组件,但在使用el-date-picker时,我们可能会遇到设置样式无效的情况。 原因分析 这是因为el-date-picker组件本身使用了格式为scoped的CSS,在组件内部定义的样式只能作用于该组件内的元素。而在设置el-da…

    css 2023年6月9日
    00
  • JQuery animate动画应用示例

    下面是详细的jQuery animate动画应用示例攻略: 1. 简介 在网页设计中,常常需要使用到动画效果来吸引用户的注意力,使用户体验更加生动。而jQuery的animate()函数能够实现简单方便的动画效果,包括位置变化、尺寸变化、透明度、背景色等等。本文将介绍如何使用jQuery的animate()函数来实现动画效果,并提供两个使用示例。 2. 基本…

    css 2023年6月9日
    00
  • 详解CSS3 用border写 空心三角箭头 (两种写法)

    下面我将详细讲解“详解CSS3 用border写空心三角箭头 (两种写法)”的完整攻略。 首先,创建一个HTML文档,并添加一个指向CSS文件的链接。然后,在CSS中,我们可以使用两种方法来用border属性创建一个空心三角箭头。 方法一: .arrow { width: 0; height: 0; border-top: 10px solid transp…

    css 2023年6月10日
    00
  • IE8/9 使用text-overflow: ellipsis 做块元素超长内容变省略号的问题

    当某个块元素的内容过长时,为了保证页面的美观度,有时需要将超出部分省略显示为省略号(…)。而在IE8/9浏览器中,使用 text-overflow: ellipsis 作为实现超出内容显示省略号的方式会出现问题,以下是解决方案的攻略。 步骤 1. 设置块元素的样式 首先,需要给块元素设置 text-overflow: ellipsis,以实现内容超出限制…

    css 2023年6月9日
    00
  • CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式

    CSS3 重置iPhone浏览器按钮input,select等表单元素的默认样式,可以通过以下步骤实现: 选取需要重置样式的表单元素 首先,要重新设置表单元素的样式,需要准确选取需要重置样式的元素。可以利用CSS选择器中的属性选择器来选取想要的元素。例如,想要简化select下拉列表框的样式,可以利用以下选择器: select { /* 重置样式代码 */ …

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