JS原生实现连续滚动文字

JS原生实现连续滚动文字欢迎关注,【前端突击】猎鹰突击,迎难而上,期待你的加入…

JS原生实现连续滚动文字

前言:最近在工作中遇到,文字在大屏中,出现底部有留白导致不连续的现象,很奇怪,故写这篇文章细究其原因

关键字: offsetTop scrollTop offsetHeight

首先贴个效果图

JS原生实现连续滚动文字

来看下代码怎么做到的

<!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++;}}

再看下图更直观些

JS原生实现连续滚动文字

offsetHeight

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

JS原生实现连续滚动文字

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

总结

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

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

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

JS原生实现连续滚动文字

今天的文章JS原生实现连续滚动文字分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/22914.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注