javascript定时器实现无缝滚动效果

代码星河引
• 阅读 3230

最近学习定时器的相关知识,整理定时器实现无缝滚动的效果。

原理

  • 用定时器实现ul滚动。
  • 当滚动超过ul总长度的二分之一时(即oUl.offsetLeft<-oUl.offsetWidth/2),将left切换到0(向左滚动)。
  • 当ul左边距离大于0的时候,将left切换到总长度的一般(即oUl.style.left=-oUl.offsetWidth/2+"px")。
  • 向左滚动的时候-2
  • 向右滚动的时候+2

javascript定时器实现无缝滚动效果

代码实现

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>定时器实现无缝滚动例子</title>
</head>
<style>
  * {
    margin: 0;
    padding: 0;
  }
  #div1 {
    width: 700px;/* 按照显示四张图片计算宽度 */
    height: 117px;
    margin: 20px auto;/* 页面居中 */
    position: relative;
    overflow: hidden;/* 超出部分隐藏 */
  }
  #div1 ul{
    position: absolute;
    left: 0;
    top: 0;
  }
  #div1 ul li{
    float: left;
    width: 175px;
    height: 117px;
    list-style-type: none;
  }
</style>
<script>
  window.onload=function(){
    var oDiv=document.getElementById("div1");//获取div1元素
    var oUl=oDiv.getElementsByTagName("ul")[0];//获取ul元素
    var oLi=oUl.getElementsByTagName("li");//获取li元素
    var oLeft=document.getElementById("moveleft");//获取向左滚动元素
    var oRight=document.getElementById("moveright");//获取向右滚动元素
    oUl.innerHTML+=oUl.innerHTML;//把ul中li元素重复拼接一次
    var speed=-2;//设置左滚动和右滚动,如果为负值为左滚动正值为右滚动
    oUl.style.width=oLi[0].offsetWidth*oLi.length+"px";//设置ul宽度为li宽度总和
    function move(){//定时器中的方法独立出来
      if(oUl.offsetLeft<-oUl.offsetWidth/2){//左移,当ul左侧的距离小于总距离的一半时就把ul的left设置为0,因为是负值所以加-
        oUl.style.left="0";
      }
      if(oUl.offsetLeft>0){//右移,当ul左侧的距离大于0时,把ul的left设置为ul总宽度的一半,加-
        oUl.style.left=-oUl.offsetWidth/2+"px";
      }
      oUl.style.left=oUl.offsetLeft+speed+"px";//不符合上述两个要求的时候就直接滚动
    }
    var timer=setInterval(move,30);//设置定时器

    oDiv.onmouseover=function(){//当鼠标划到div1时清除定时器
      clearInterval(timer);
    }
    oDiv.onmouseout=function(){//当鼠标移除div1时重新开启定时器
      timer=setInterval(move,30);
    }

    oLeft.onclick=function(){//当点击向左滚动按钮时,设置为2
      speed=-2;
    }

    oRight.onclick=function(){//当点击向右滚动按钮时,设置为-2
      speed=2;
    }
  }
</script>
<body>
  <a href="javascript:;" id="moveleft">向左滚动</a>
  <a href="javascript:;" id="moveright">向右滚动</a>
  <div id="div1">
    <ul>
      <li><img src="img/1.jpg" alt=""></li>
      <li><img src="img/2.jpg" alt=""></li>
      <li><img src="img/3.jpg" alt=""></li>
      <li><img src="img/4.jpg" alt=""></li>
    </ul>
  </div>
</body>

</html>
点赞
收藏
评论区
推荐文章
前端 滚动到目标元素位置 VUE 版本
1、前言想起之前一次在写一个小程序商城时候,详情页的类似锚点的跳转花了我不少时间,因为刚写,对小程序滚动,滚动距离那套不熟悉加之本身对什么滚动高度,元素距离顶部距离不是很了解,花了挺长时间的,这几天有空,就研究了下。2、先看效果在这里插入图片描述(https://imghelloworld.osscnbeijing.aliyuncs.c
Python进阶者 Python进阶者
3年前
一篇文章帮助你理解跑马灯的滚动原理
走马灯效果其实就是利用标签进行图片和文字滚动,设置的样式不一样,滚动的效果就不一样,实现“走马观花”的效果。一、滚动方式1\.普通滚动Document这里是您要填的内容1.1 文字碰到左边就会停止这里是您要填的内容1.2 文字碰到右边就会停止这里是您要填的内容2.图片滚动2.1 预设滚动图片滚动到右边界,自动再
Wesley13 Wesley13
3年前
JS之滚动条效果2
在前面一篇说的是滚动条效果,本篇继续在前面的基础上面针对滚动条进行操作。本次要实现的效果如下:拖动滚动条左右移动时,上面的图片内容也相对外层盒子做相对移动。!(https://oscimg.oschina.net/oscnet/c64767294c846f5a670e95fe57384474d3d.png)下面针对要实现的效果进行分析:首先是页面
Wesley13 Wesley13
3年前
Mysql创建定时事件,定时器
查看Mysql的定时器是否开启showvariableslike'event_scheduler';开启Mysql定时器SETGLOBALevent_scheduler1;关闭Mysql定时器SETGLOBALevent_scheduler0;开启
Wesley13 Wesley13
3年前
HTML5+CSS3制作无限滚动与文字跳动效果
㈠用HTML5CSS3做无限滚动效果⑴逻辑分析!(https://img2018.cnblogs.com/blog/1746290/201909/1746290201909232245582391180041720.png)⑵实践示例前5张图片为所有图片显示区,假设总长度为1100px;
Stella981 Stella981
3年前
Flutter 可滚动组件:简介
前言当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误。为此,Flutter提供了多种可滚动组件(ScrollableWidget)用于显示列表和长布局。可滚动组件都直接或间接包含一个Scrollable组件,它们包括一些共同的属性,接口如下:Scrollable({
Wesley13 Wesley13
3年前
MFC 控件编程之水平滚动条跟垂直滚动条
        MFC控件编程之水平滚动条跟垂直滚动条一点水平滚动条的操作  首先在操作滚动条的时候.我们要知道滚动条的一些属性.比如我们要设置最大值最小值.以及每次递增的值是多少.都要设置.所有就有一个结构.专门存储了滚动条信息.而我们在对话框一启动就要
Wesley13 Wesley13
3年前
14天1000+大集群滚动升级,银行柜台竟然毫无感觉
摘要:中国工商银行联合华为完成了金融行业首家规模超千台的Hadoop集群大版本滚动升级,为期两周的升级过程突破了传统的离线升级模式,真正实现了业务无感的平滑滚动升级。2020年8月27日,中国工商银行联合华为完成了金融行业首家规模超千台的Hadoop集群大版本滚动升级,为期两周的升级过程突破了传统的离线升级模式,真正实现了业务无感的平滑滚动升
松
3年前
务实|内容滚动与导航标签互动关联方案
务实|内容滚动与导航标签互动关联方案一、需求场景描述1.先看演示效果类似这种,当也页面左侧内容滚动的时候,需要关联激活左侧导航节点;当点击右侧导航节点时,也会将左侧对应的内容滚动到可视区域顶部的场景,并不少见,比如知识类社区,掘金查看文章时,百度查看百科词条时,都有这种场景,而我的实际开发种也遇到此类需求。遂有此文。2.需求分解:1.滚动左侧内容,关联激活右侧导航节点2.单击右侧导航节点,右侧相应的段落滚动到可视区顶部二、关键技术点提前知技术点1:Element.scrollIntoView()1
小白学大数据 小白学大数据
4个月前
Scrapy结合Selenium实现滚动翻页数据采集
引言在当今的互联网数据采集领域,许多网站采用动态加载技术(如AJAX、无限滚动)来优化用户体验。传统的基于Requests或Scrapy的爬虫难以直接获取动态渲染的数据,而Selenium可以模拟浏览器行为,实现滚动翻页和动态内容加载。本文将介绍如何结合S
程序员一鸣 程序员一鸣
1个月前
鸿蒙开发:使用nestedScroll解决滑动冲突
在实际的开发中,远远要比前边的案例复杂,比如我之前封装的刷新库,滚动组件上面有刷新头,下面也有加载尾,还有更复杂的,列表吸顶操作等等,一个nestedScroll属性是远远不够的,往往还要和滑动监听,是否滚动到了顶部和尾部等相结合,才能实现我们实际的效果。