原生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中的constructor和prototype
Apr 07 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
javascript学习笔记(一) 在html中使用javascript
Jun 18 Javascript
jQuery动画效果animate和scrollTop结合使用实例
Apr 02 Javascript
jQuery获取选中内容及设置元素属性的方法
Jul 09 Javascript
简介JavaScript中的setDate()方法的使用
Jun 11 Javascript
AngularJS入门教程之静态模板详解
Aug 18 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
js实现随机div颜色位置 类似满天星效果
Oct 24 Javascript
JavaScript交换两个变量方法实例
Nov 25 Javascript
react 路由Link配置详解
Nov 11 Javascript
Angular性能优化之第三方组件和懒加载技术
Vue通过懒加载提升页面响应速度
如何开发一个渐进式Web应用程序PWA
Html5生成验证码的示例代码
May 10 #Javascript
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
Vue实现下拉加载更多
May 09 #Vue.js
You might like
一棵php的类树(支持无限分类)
2006/10/09 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
Django nginx配置实现过程详解
2020/09/10 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
python中Mako库实例用法
2020/12/31 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
计算机网络及管理学专业求职信
2014/06/05 职场文书
共青团员自我评价
2015/03/10 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS