我的编程空间,编程开发者的网络收藏夹
学习永远不晚

纯js如何实现轮播图效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

纯js如何实现轮播图效果

这篇文章主要介绍纯js如何实现轮播图效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

效果图

纯js如何实现轮播图效果

代码

css

 * {    margin: 0;    padding: 0}body{    width: 1000px;    margin: 0 auto;}li {    list-style: none;}img {    border: 0;      vertical-align: middle;}a {    color: #666;    text-decoration: none;}a:hover {    color: #e33333;}.fl {    float: left;}.fr {    float: right;}.focus {    position: relative;    width: 721px;    height: 455px;    background-color: purple;    overflow: hidden;    margin-top: 20px;}.focus ul {    position: absolute;    top: 0;    left: 0;    width: 600%;}.focus ul li {    float: left;}.arrow-l,.arrow-r {    display: none;    position: absolute;    top: 50%;    margin-top: -20px;    width: 24px;    height: 40px;    background: rgba(0, 0, 0, .3);    text-align: center;    line-height: 40px;    color: #fff;    font-family: 'icomoon';    font-size: 18px;    z-index: 2;}.arrow-r {    right: 0;}.circle {    position: absolute;    bottom: 10px;    left: 50px;}.circle li {    float: left;    width: 8px;    height: 8px;        border: 2px solid rgba(255, 255, 255, 0.5);    margin: 0 3px;    border-radius: 50%;        cursor: pointer;}.current {    background-color: #fff;}

html

<div class="focus fl">    <!-- 左侧按钮 -->    <a href="javascript:;" class="arrow-l arrow"> < </a>    <!-- 右侧按钮 -->    <a href="javascript:;" class="arrow-r arrow"> > </a>    <!-- 核心的滚动区域 -->    <ul>        <li>            <a href="#" ><img class="lazy" data-src="images/focus.jpg" alt=""></a>        </li>        <li>            <a href="#" ><img class="lazy" data-src="images/focus1.jpg" alt=""></a>        </li>        <li>            <a href="#" ><img class="lazy" data-src="images/focus2.jpg" alt=""></a>        </li>        <li>            <a href="#" ><img class="lazy" data-src="images/focus3.jpg" alt=""></a>        </li>    </ul>    <!-- 小圆圈 -->    <ol class="circle">    </ol></div>

JavaScript

window.addEventListener('load', function() {    // 1. 获取元素    var arrow_l = document.querySelector('.arrow-l');    var arrow_r = document.querySelector('.arrow-r');    var focus = document.querySelector('.focus');    var focusWidth = focus.offsetWidth;    // 2. 鼠标经过focus 就显示隐藏左右按钮    focus.addEventListener('mouseenter', function() {        arrow_l.style.display = 'block';        arrow_r.style.display = 'block';        clearInterval(timer);        timer = null; // 清除定时器变量    });    focus.addEventListener('mouseleave', function() {        arrow_l.style.display = 'none';        arrow_r.style.display = 'none';        timer = setInterval(function() {            //手动调用点击事件            arrow_r.click();        }, 2000);    });    // 3. 动态生成小圆圈  有几张图片,我就生成几个小圆圈    var ul = focus.querySelector('ul');    var ol = focus.querySelector('.circle');    // console.log(ul.children.length);    for (var i = 0; i < ul.children.length; i++) {        // 创建一个小li         var li = document.createElement('li');        // 记录当前小圆圈的索引号 通过自定义属性来做         li.setAttribute('index', i);        // 把小li插入到ol 里面        ol.appendChild(li);        // 4. 小圆圈的排他思想 我们可以直接在生成小圆圈的同时直接绑定点击事件        li.addEventListener('click', function() {            // 干掉所有人 把所有的小li 清除 current 类名            for (var i = 0; i < ol.children.length; i++) {                ol.children[i].className = '';            }            // 留下我自己  当前的小li 设置current 类名            this.className = 'current';            // 5. 点击小圆圈,移动图片 当然移动的是 ul             // ul 的移动距离 小圆圈的索引号 乘以 图片的宽度 注意是负值            // 当我们点击了某个小li 就拿到当前小li 的索引号            var index = this.getAttribute('index');            // 当我们点击了某个小li 就要把这个li 的索引号给 num              num = index;            // 当我们点击了某个小li 就要把这个li 的索引号给 circle              circle = index;            // num = circle = index;            console.log(focusWidth);            console.log(index);            animate(ul, -index * focusWidth);        })    }    // 把ol里面的第一个小li设置类名为 current    ol.children[0].className = 'current';    // 6. 克隆第一张图片(li)放到ul 最后面    var first = ul.children[0].cloneNode(true);    ul.appendChild(first);    // 7. 点击右侧按钮, 图片滚动一张    var num = 0;    // circle 控制小圆圈的播放    var circle = 0;    // flag 节流阀    var flag = true;    arrow_r.addEventListener('click', function() {        if (flag) {            flag = false; // 关闭节流阀            // 如果走到了最后复制的一张图片,此时 我们的ul 要快速复原 left 改为 0            if (num == ul.children.length - 1) {                ul.style.left = 0;                num = 0;            }            num++;            animate(ul, -num * focusWidth, function() {                flag = true; // 打开节流阀            });            // 8. 点击右侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放            circle++;            // 如果circle == 4 说明走到最后我们克隆的这张图片了 我们就复原            if (circle == ol.children.length) {                circle = 0;            }            // 调用函数            circleChange();        }    });    // 9. 左侧按钮做法    arrow_l.addEventListener('click', function() {        if (flag) {            flag = false;            if (num == 0) {                num = ul.children.length - 1;                ul.style.left = -num * focusWidth + 'px';            }            num--;            animate(ul, -num * focusWidth, function() {                flag = true;            });            // 点击左侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放            circle--;            // 如果circle < 0  说明第一张图片,则小圆圈要改为第4个小圆圈(3)            // if (circle < 0) {            //     circle = ol.children.length - 1;            // }            circle = circle < 0 ? ol.children.length - 1 : circle;            // 调用函数            circleChange();        }    });    function circleChange() {        // 先清除其余小圆圈的current类名        for (var i = 0; i < ol.children.length; i++) {            ol.children[i].className = '';        }        // 留下当前的小圆圈的current类名        ol.children[circle].className = 'current';    }    // 10. 自动播放轮播图    var timer = setInterval(function() {        //手动调用点击事件        arrow_r.click();    }, 2000);})

重点!!!

用到的实现图片移动的动画文件,animate.js

function animate(obj, target, callback) {    // console.log(callback);  callback = function() {}  调用的时候 callback()    // 先清除以前的定时器,只保留当前的一个定时器执行    clearInterval(obj.timer);    obj.timer = setInterval(function() {        // 步长值写到定时器的里面        // 把我们步长值改为整数 不要出现小数的问题        // var step = Math.ceil((target - obj.offsetLeft) / 10);        var step = (target - obj.offsetLeft) / 10;        step = step > 0 ? Math.ceil(step) : Math.floor(step);        if (obj.offsetLeft == target) {            // 停止动画 本质是停止定时器            clearInterval(obj.timer);            // 回调函数写到定时器结束里面            // if (callback) {            //     // 调用函数            //     callback();            // }            callback && callback();        }        // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10        obj.style.left = obj.offsetLeft + step + 'px';    }, 15);}

以上是“纯js如何实现轮播图效果”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

纯js如何实现轮播图效果

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

纯js如何实现轮播图效果

这篇文章主要介绍纯js如何实现轮播图效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图代码1. css * { margin: 0; padding: 0}body
2023-06-25

纯css如何实现轮播图banner自动轮换效果

这篇文章主要为大家展示了纯css如何实现轮播图banner自动轮换效果,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“纯css如何实现轮播图banner自动轮换效果”这篇文章吧。css是什么意思cs
2023-06-08

纯HTML和CSS如何实现JD轮播图效果

小编给大家分享一下纯HTML和CSS如何实现JD轮播图效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用了纯HTML和CSS实现了JD的轮播图,没有加动态效果,主要是使用了定位的知识。    ,如图为两个侧边箭头图片。
2023-06-08

使用纯CSS、JS实现图片轮播效果的示例

小编给大家分享一下使用纯CSS、JS实现图片轮播效果的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!js有什么特点1、js属于一种解释性脚本语言;2、在绝大多
2023-06-14

js如何编写轮播图效果

小编给大家分享一下js如何编写轮播图效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下1、html部分
2023-06-08

React如何实现轮播图效果

这篇文章主要介绍“React如何实现轮播图效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React如何实现轮播图效果”文章能帮助大家解决问题。效果:轮播功能用到了react-slick组件,安装
2023-07-02

css如何实现轮播图效果

本文小编为大家详细介绍“css如何实现轮播图效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“css如何实现轮播图效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、准备了3张大小相同的图片,将图片的文件名命
2023-07-04

android如何实现banner轮播图无限轮播效果

小编给大家分享一下android如何实现banner轮播图无限轮播效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下效果展示第一步(权限配置)2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录