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

yizhihongxing

现在我来详细为你讲解“原生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日

相关文章

  • CSS实例:超酷的网站导航按钮

    对于“CSS实例:超酷的网站导航按钮”这个主题,我给出完整的攻略如下: 1. 确定HTML结构 首先我们要对需要制作的超酷的导航按钮的HTML结构进行设计,这里我们可以先采用一个简单的ul-li结构: <ul> <li><a href="#">Home</a></li> <…

    css 2023年6月10日
    00
  • XHEditor编辑器使用文档

    XHEditor编辑器使用文档 简介 XHEditor是一款轻量级HTML5代码编辑器,支持常见的代码高亮、语法提示、自动完成、代码折叠、文件浏览等功能。 安装 在网站中引入CSS和JS文件即可使用,示例如下: <link rel="stylesheet" href="xheditor.min.css"> …

    css 2023年6月10日
    00
  • element-ui el-dialog嵌套table组件,ref问题及解决

    下面我会详细讲解 “element-ui el-dialog嵌套table组件,ref问题及解决” 的完整攻略,包括问题背景、示例说明以及解决方法。 问题背景 在使用 element-ui el-dialog 组件嵌套 el-table 组件的时候,经常会出现 ref 无法在父组件引入子组件的问题。 示例说明 示例1:例如一个用户管理的页面,可以通过一个按钮…

    css 2023年6月10日
    00
  • CSS样式简单实现Table没有外边框只有内边框

    想要实现没有外边框、只有内边框的Table样式,可以通过CSS样式来调整表格的边框、间距、背景色等属性。 以下是实现该效果的方法: 1. 设置表格边框和间距 首先,可以使用CSS的border属性来设置表格的边框样式,并将其设为none来去除外边框。接着,使用border-collapse属性来将表格单元格的边框合并在一起,达到只有内边框的效果。最后,使用C…

    css 2023年6月10日
    00
  • 基于Css Variable的主题切换完美解决方案(推荐)

    下面我将详细讲解如何使用CSS变量实现主题切换的完美解决方案。 什么是CSS变量 CSS变量(也称为自定义属性)是一种新特性,可以让开发者使用自定义的变量来定义CSS属性值。例如,定义一个颜色变量并在不同的CSS属性中使用它。 :root { –primary-color: #007bff; } a { color: var(–primary-color…

    css 2023年6月10日
    00
  • Vue开发中出现Loading Chunk Failed的问题解决

    问题描述:在Vue开发中,有时候会出现Loading Chunk Failed的问题,这种情况下会导致项目无法正常进行。那么这个问题该如何解决呢? 解决方案:出现Loading Chunk Failed的问题,一般都与Webpack有关。我们可以尝试以下几种解决方案: 重新安装依赖包。 有时候出现的问题可能是由于项目中某些依赖包出现了问题。这时候,我们可以删…

    css 2023年6月9日
    00
  • CSS3使用transition实现的鼠标悬停淡入淡出

    下面我将详细讲解“CSS3使用transition实现的鼠标悬停淡入淡出”的完整攻略,希望能对你有所帮助。 什么是transition? 在介绍“CSS3使用transition实现的鼠标悬停淡入淡出”之前,我们需要先了解一下transition是什么。 transition是CSS3中的一种动画形式,用于实现属性变化时的平滑过渡。通过定义起点、终点和时间的…

    css 2023年6月10日
    00
  • 详解CSS不受控制的position fixed

    我来详细讲解一下CSS不受控制的position fixed。 什么是position fixed 首先,我们先来了解一下position fixed的概念。 position fixed是CSS中一种定位方式,它可以让元素相对于浏览器窗口固定位置,也就是说,即使页面滚动,该元素也会保持在同样的位置不动。 下面是一个使用position fixed的示例: …

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