原生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 相关文章推荐
js变换显示图片的实例
Apr 16 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
Jul 17 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
JQ技术实现注册页面带有校验密码强度
Jul 27 Javascript
每天一篇javascript学习小结(属性定义方法)
Nov 19 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
Aug 22 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
Oct 22 Javascript
Angular性能优化之第三方组件和懒加载技术
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
You might like
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
Js sort排序使用方法
2011/10/17 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
计算s=f(f(-1.4))的值
2014/05/06 面试题
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
文明演讲稿范文
2014/05/12 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
python Polars库的使用简介
2021/04/21 Python
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js
MySQL新手入门进阶语句汇总
2022/09/23 MySQL