原生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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
Javascript 检测、添加、移除样式(className)函数代码
Sep 08 Javascript
jQuery Ajax之$.get()方法和$.post()方法
Oct 12 Javascript
JavaScript 模拟用户单击事件
Dec 31 Javascript
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
jQuery插件开发全解析
Oct 10 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
webpack4 处理CSS的方法示例
Sep 03 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
Angular性能优化之第三方组件和懒加载技术
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
You might like
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
document.getElementById介绍
2011/09/13 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
JS运算符简单用法示例
2020/01/19 Javascript
简述Python中的面向对象编程的概念
2015/04/27 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
秋季运动会广播稿
2014/02/22 职场文书
教师年度考核评语
2014/04/28 职场文书
模具专业求职信
2014/06/26 职场文书
欢度春节标语
2014/07/01 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
党性分析材料格式
2014/12/19 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
2015年党总支工作总结
2015/05/25 职场文书