原生Js 实现的简单无缝滚动轮播图的示例代码


Posted in Javascript onMay 10, 2021

   简单无缝滚动轮播图存在很多漏洞,就是后期增加图片时会很不方便,需要改动的地方也很多,耦合性也很强,只适用于一部分程序,所以我们可以通过改动图片结构和计算折算点的方式,升级代码。

      原简单的滚动轮播代码

<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .scroll{
            position: relative;
            width: 830px;/*展示宽度 展示4个图+3个边框=830*/
            height: 130px;
            border: 10px solid rgb(15, 15, 15);
            margin: 100px auto;
            overflow: hidden;
        }
        .scroll ul{
            position: absolute;
            width: 5000px;/*ul能存下所有li的宽*/
            height: 130px;
            top: 0;
            left: 0;
        }
        .scroll ul li{
            float: left;
            width: 200px;
            height: 130px;
            margin-right: 10px;
            overflow: hidden;
        }

    </style>
</head>
<body>
    <div id="scroll" class="scroll">
        <ul id="munit">
            <li><img src="../BOM/shuzi/3.png" alt=""></li>
            <li><img src="../BOM/shuzi/4.png" alt=""></li>
            <li><img src="../BOM/shuzi/5.png" alt=""></li>
            <li><img src="../BOM/shuzi/6.png" alt=""></li>
            <li><img src="../BOM/shuzi/7.png" alt=""></li>
            <li><img src="../BOM/shuzi/8.png" alt=""></li>
            <li><img src="../BOM/shuzi/9.png" alt=""></li>

            <li><img src="../BOM/shuzi/3.png" alt=""></li>
            <li><img src="../BOM/shuzi/4.png" alt=""></li>
            <li><img src="../BOM/shuzi/5.png" alt=""></li>
            <li><img src="../BOM/shuzi/6.png" alt=""></li>
            <li><img src="../BOM/shuzi/7.png" alt=""></li>
            <li><img src="../BOM/shuzi/8.png" alt=""></li>
            <li><img src="../BOM/shuzi/9.png" alt=""></li>
        </ul>
    </div>

    <script>
        //获取元素
        var scroll = document.getElementById("scroll");
        var munit = document.getElementById("munit");
        var li = munit.children;
        // 进行滚动
        var nowLeft = 0;
        //要找到ul元素运动的折返点
        var back = -1470;//图和边框是li的宽度,展示的有4张图,所以折返点就是1260
        //定时器
        var timer = setInterval(run,20);

        // 鼠标移上scroll停止
        scroll.onmouseover = function(){
            clearInterval(timer);
        }
        // 移开轮播
        scroll.onmouseout = function(){
            timer = setInterval(run,20);
        }

        //运动函数
        function run(){
            nowLeft -= 2;
            //判断是否走到了折返点,走到了,则瞬间切换到0位置
            if(nowLeft <= back){
                nowLeft = 0;
            }
            munit.style.left = nowLeft + "px";
        }

       
    </script>
</body>
</html>

   在<div id="scroll">结构给ul新增的一个父级div,这样之后添加图片,后期通过获取ul宽度就可以了计算折算点
   1、折返点计算需要通过Js自动计算
   var back = -munit.offsetWidth;//元素左移,值为负数
   2、自动生成另一组对应的图片结构 li
   munit.innerHTML = munit.innerHTML + munit.innerHTML;//这样就会增加一组li标签,后期增加图片也会随之增加
修改部分代码,

css改写部分:
  /*给ul新增的一个父级div,这样添加图片后期获取ul宽度 就可以了 */
        .scroll .inner{
            position: relative;
            width: 5000px;
        }
        .scroll ul{
            position: absolute;
            height: 130px;
            top: 0;
            left: 0;
            list-style: none;


body改写部分:      
<body>
    <div id="scroll" class="scroll">
       <div class="inner">
           <ul id="munit">
              <li><img src="../BOM/shuzi/3.png" alt=""></li>
              <li><img src="../BOM/shuzi/4.png" alt=""></li>
              <li><img src="../BOM/shuzi/5.png" alt=""></li>
              <li><img src="../BOM/shuzi/6.png" alt=""></li>
              <li><img src="../BOM/shuzi/7.png" alt=""></li>
              <li><img src="../BOM/shuzi/8.png" alt=""></li>
              <li><img src="../BOM/shuzi/9.png" alt=""></li>
              <li><img src="../BOM/shuzi/10.png" alt=""></li>
          </ul>
       </div>
    </div>

JS改写部分:
<script>
        //获取元素
        var scroll = document.getElementById("scroll");
        var munit = document.getElementById("munit");

        //改写部分
        //1 折返点计算需要通过Js自动计算
        var back = -munit.offsetWidth;//元素左移,值为负数
        //2 自动生成另一组对应的图片结构 li
        munit.innerHTML = munit.innerHTML + munit.innerHTML;
        // 进行滚动


        var nowLeft = 0;
        //定时器
        var timer = setInterval(run,20);

        // 鼠标移上scroll停止
        scroll.onmouseover = function(){
            clearInterval(timer);
        }
        // 移开轮播
        scroll.onmouseout = function(){
            timer = setInterval(run,20);
        }

        //运动函数
        function run(){
            nowLeft -= 1;
            //判断是否走到了折返点,走到了,则瞬间切换到0位置
            if(nowLeft <= back){
                nowLeft = 0;
            }
            munit.style.left = nowLeft + "px";
        }

    </script>
</body>
</html>

这样的代码耦合性低,也适合任意个数的li、任意大小的图片的加入

以上就是原生Js 实现的简单无缝滚动轮播图的示例代码的详细内容,更多关于Js 实现的简单无缝滚动轮播图的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JQuery Tips(4) 一些关于提高JQuery性能的Tips
Dec 19 Javascript
详解JS函数重载
Dec 04 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
Feb 16 Javascript
jquery判断input值不为空的方法
Jun 05 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
JavaScript解析及序列化JSON的方法实例分析
Jan 04 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
vue - props 声明数组和对象操作
Jul 30 Javascript
浅谈JavaScript作用域
Dec 06 Javascript
Angular性能优化之第三方组件和懒加载技术
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
You might like
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php include和require的区别深入解析
2013/06/17 PHP
php创建sprite
2014/02/11 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP echo()函数讲解
2019/02/15 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python中count函数简单用法
2020/01/05 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
儿科护理实习自我鉴定
2013/09/19 职场文书
五年级语文教学反思
2014/01/30 职场文书
学校花圃的标语
2014/06/18 职场文书
安全生产年活动总结
2014/08/29 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
运动会加油稿
2015/07/22 职场文书
初中政治教学工作总结
2015/08/13 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python