原生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利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
Feb 12 Javascript
用js格式化金额可设置保留的小数位数
May 09 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
JavaScript获取浏览器信息的方法
Nov 20 Javascript
Vue.js学习教程之列表渲染详解
May 17 Javascript
jQuery实现右侧抽屉式在线客服功能
Dec 25 jQuery
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
JavaScript ES6箭头函数使用指南
Dec 30 Javascript
vue+Element实现搜索关键字高亮功能
May 28 Javascript
JavaScript学习教程之cookie与webstorage
Jun 23 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
Angular性能优化之第三方组件和懒加载技术
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
You might like
留言板翻页的实现详解
2006/10/09 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
学习jquery之一
2007/04/27 Javascript
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
创建nuxt.js项目流程图解
2020/03/13 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
python实现剪切功能
2019/01/23 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
文秘专业应届生求职信范文
2013/11/14 职场文书
益达广告词
2014/03/14 职场文书
美术课外活动总结
2014/07/08 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
旷课检讨书500字
2014/10/14 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js