JS原生实现连续滚动文字

更新日期: 2019-12-31阅读: 2.5k标签: 滚动
前言:最近在工作中遇到,文字在大屏中,出现底部有留白导致不连续的现象,很奇怪,故写这篇文章细究其原因

关键字: offsetTop scrollTop offsetHeight

来看下代码怎么做到的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <title>文字连续滚动</title>
    <style>
        *{margin:0px;padding:0px}   
    </style>

  </head>  
  <body>  
   <div style="height:100px;background-color: rgb(136, 136, 206);"></div>
   <div id="marquee" style="overflow:hidden;height:500px;width:220px;margin-left:20px;background-color: blueviolet;">
      <div id="marqueecont" style="background-color: #c7bcc2;;">
       <ul style="margin:0px;list-style:none;">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
        <li>11</li>
        <li>12</li>
        <li>13</li>
        <li>14</li>
        <li>15</li>
        <li>16</li>
        <li>17</li>
        <li>18</li>
      </ul>
      </div>
      <div id='marqueecont2' style="background-color: #d4a8c2;"></div>
      </div>
        
     <script>
         var marquee = document.getElementById('marquee');
         var marqueecont = document.getElementById('marqueecont');
         var marqueecont2 = document.getElementById('marqueecont2');
        MarqTop(marquee,marqueecont,marqueecont2,30);
        function MarqTop(marquee,marqueecont,marqueecont2,speed){
          marqueecont2.innerHTML=marqueecont.innerHTML;
          // 用这个函数这个滚动连续
          // marqueecont.offsetTop 距离顶部的距离 marquee.scrollTop 滚动条滚动的距离
          function Marquee(){
          if(marqueecont.offsetTop<=marquee.scrollTop) 
          {
            debugger
            marquee.scrollTop = marquee.scrollTop - marqueecont.offsetHeight;
          }
          else{
            marquee.scrollTop++;
            }
          }
          var MyMar=setInterval(Marquee,speed);
          marquee.onmouseover=function() {clearInterval(MyMar);}
          marquee.onmouseout=function() {MyMar=setInterval(Marquee,speed)};
          }

       </script>  
  </body>  
</html>

核心代码

offsetTop与scrollTop作比较

看下代码:

offsetTop 小于等于 scrollTop时 scrollTop至为0,此次滚动条回到初始位置

注: 这里面scrollTop为负值时,默认至为0

var marquee = document.getElementById('marquee');
var marqueecont = document.getElementById('marqueecont');
// offsetTop 小于等于 scrollTop时 scrollTop至为0
if(marqueecont.offsetTop<=marquee.scrollTop) {
    marquee.scrollTop = marquee.scrollTop - marqueecont.offsetHeight;
} else { marquee.scrollTop++;}}

再看下图更直观些


offsetHeight

offsetHeight为滚动内容实际的高度,如图


所以marquee.scrollTop - marqueecont.offsetHeight为负数,scrollTop为负值时,默认会至为0 至此连续滚动的文字就这么实现了,上面显示滚动条是为了演示属性overflow: hidden;改为了overlay显示垂直滚动条


总结

  • 连续滚动文字,主要是根据offsetTop和scrollTop进行比对
  • 滚动内容移动到顶部也是滚动条的滚动高度,此时完成一次循环
  • 结合定时器周期的执行,完成连续的滚动效果
  • scrollTop为负值时,默认至为0
  • 工作中主要遇到的问题是,第二个div未给赋值,导致是空白上移到顶部才进入下一个循环,导致看上去不连续的现象

通过上面的介绍,希望给你一些建设性的参考,有任何问题欢迎骚扰,加入【前端突击】,长按二维码关注,或微信搜索 前端突击 一起探讨前端的边界

欢迎关注,【前端突击】猎鹰突击,迎难而上,期待你的加入...

作者:dragonking
链接:https://juejin.im/post/5e04b833e51d4558284739e7
来源:掘金

链接: https://www.fly63.com/article/detial/7111

BetterScroll移动端滚动场景的应用

BetterScroll 是一款重点解决移动端各种滚动场景需求的开源插件,有下列功能支持滚动列表,下拉刷新,上拉刷新,轮播图,slider等功能。better-scroll通过使用惯性滚动、边界回弹、滚动条淡入淡出来确保滚动的流畅。

css隐藏滚动条_基于webkit内容隐藏滚动条的方法总汇

基于webkit内容隐藏滚动条,核心代码是:overflow的值需要设置为auto或者scroll,然后设置::-webkit-scrollbar的display属性为none。当然也可以通过设置滚动条的宽度为0。

原生js判断加载更多事件,通过获取页面滚动距离、文档总高度、浏览器视口高度

原生js获取滚动条在Y轴上的滚动距离、获取文档的总高度、获取浏览器视口的高度的方法实现,用于判断页面加载数据。

基于iScroll实现内容滚动

iScroll 是一款针对web app使用的滚动控件,它可以模拟原生IOS应用里的滚动列表操作,还可以实现缩放、拉动刷新、精确捕捉元素、自定义滚动条等功能。

js+css 实现 滚动条滑动时显示,不滑动时隐藏

把原有的滚动条隐藏,创建个新的滚动条,并拓展其宽度,达到隐藏的效果,而判断滚动条是否滚动,保存原有的滚动条到顶部的距离,看是否发生改变,做出相应的判断。

js如何实现滚动到一定位置将内容固定在页面顶部

window.onscroll为滚轮监听,document.body.scrollTop||document.documentElement.scrollTop 写两个是为了兼容不同浏览器。固定位置的top要设为负值,原因不明,若为0则会跟上方有空隙。左右位置虽然是0也要设,不然若为不是100%宽度的内容会出现左右跳动。

无间歇文字滚动_ 原生js实现新闻无间歇性上下滚动

这篇文章主要介绍使用js实现文字无间歇性上下滚动,一些网站的公告,新闻列表使用的比较多,感兴趣的小伙伴们可以参考一下

原生js获取浏览器获X轴,Y轴的滚动距离

在前端开发中,需要获取浏览器滚动距离的需求,这篇文章主要讲解如何使用原生Js兼容实现获取浏览器获X轴,Y轴的滚动距离。并延伸扩展下我们一些不知道的js知识,希望对你有所帮助。

js实现返回顶部效果的方法总结

当页面特别长的时候,用户想回到页面顶部,必须得滚动好几次滚动键才能回到顶部,如果在页面右下角有个返回顶部的按钮,用户点击一下,就可以回到顶部,对于用户来说,是一个比较好的体验。

使用CSS实现无滚动条滚动

我们都知道,撸页面的时候当我们的内容超出了我们的div,往往会出现滚动条,影响美观。百度下大部分都是在说overflow:hidden或者overflow-y: no可以解决问题,但是并不能很好的解决我们的问题,那么怎么办呢?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!