原生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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
javascript 无提示关闭窗口脚本
Aug 17 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
Js判断CSS文件加载完毕的具体实现
Jan 17 Javascript
javascript类型转换示例
Apr 29 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
Feb 08 Javascript
基于vue中对鼠标划过事件的处理方式详解
Aug 22 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
Oct 19 Javascript
Vue对象赋值视图不更新问题及解决方法
Jun 03 Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 Javascript
Angular性能优化之第三方组件和懒加载技术
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
You might like
多数据表共用一个页的新闻发布
2006/10/09 PHP
php 购物车的例子
2009/05/04 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
phpwind放自动注册方法
2006/12/02 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
详解Django通用视图中的函数包装
2015/07/21 Python
Python编程argparse入门浅析
2018/02/07 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
实践Vim配置python开发环境
2018/07/02 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
Python实现注册、登录小程序功能
2018/09/21 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python中删除某个元素的方法解析
2019/11/05 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
经济管理毕业生求职信
2014/03/15 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
小学毕业感言100字
2015/07/30 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript