JavaScript垂直新聞公告無縫滾動詳解

admin發表於2017-10-23

本章節分享一段程式碼例項,它實現了新聞列表無縫垂直滾動效果。

這樣的效果通常出現在新聞公告類似的功能模組。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type=text/css>
#demo {
  overflow:hidden;
  height:132px;
  width:350px; 
  border:1px solid #dde5bc;
}
#demo a {
  width: 100%;
  overflow: hidden;
  font: 12px/16px tahoma;
  display: block;
  text-decoration: none;
  margin: 2px;
  color: #4a551c;
  padding-left: 2px;
  text-align: left;
}
#demo a:hover {
  color: #ff6600;
}
</style>
<script>
window.onload=function(){
  var speed = 16
  var demo = document.getElementById("demo");
  var demo2 = document.getElementById("demo2");
  var demo1 = document.getElementById("demo1");
  demo2.innerHTML = demo1.innerHTML;
 
  function Marquee() {
    if (demo2.offsetTop - demo.scrollTop <= 0) {
      demo.scrollTop -= demo1.offsetHeight
    }
    else {
      demo.scrollTop++
    }
  }
 
  var MyMar = setInterval(Marquee, speed)
  demo.onmouseover = function () {
    clearInterval(MyMar)
  }
  demo.onmouseout = function () {
    MyMar = setInterval(Marquee, speed)
  }
}
</script>
</head>
<body>
<div id="demo">
  <div id="demo1">
    <a href="#">螞蟻部落歡迎您,只有努力才會有美好未來</a>
    <a href="#">本站的url地址是softwhy.com</a>
    <a href="#">只有努力奮鬥才會有美好的未來。</a>
    <a href="#">沒有人一開始就是高手,必須要通過自身努力額</a>
    <a href="#">每一天都是新的,必須要好好的珍惜。</a>
    <a href="#">本站的宗旨就是分享前端基礎知識</a>
    <a href="#">分享和互助式進步最大的原動力</a>
    <a href="#">要珍惜當下的時間,只有當下才是最現實的</a>
    <a href="#">對自己有一個清晰的定位要勝過於其他人的任何讚譽</a>
    <a href="#">前端是一個更新很快的行業</a>
    <a href="#">es6已經公佈歡迎大家學習</a>
    <a href="#">css3很快就成為主流了</a>
  </div>
  <div id="demo2"></div>
</div>
</body>
</html>

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).window.onload=function(){},當網頁內容完全載入完畢再去執行函式中的程式碼。

(2).var speed = 40,用來規定定時器函式執行的間隔,其實也就是規定的滾動的速度。

(3).var demo = document.getElementById("demo"),獲取id屬性值為demo的元素物件。

(4).var demo2 = document.getElementById("demo2"),獲取id屬性值為demo2的元素物件。

(5).var demo1 = document.getElementById("demo1"),獲取id屬性值為demo1的元素物件。

(6).demo2.innerHTML = demo1.innerHTML,將demo1元素中的所有內容賦值給demo2。

(7).function Marquee() {},此函式可以實現元素的垂直位移效果。

(8).if (demo2.offsetTop - demo.scrollTop <= 0) ,判斷demo2元素距離body的距離和demo元素向上滾動的距離之差是否小於等於0。其實就是判斷demo1元素是否已經因為向上滾動已經完全隱藏。

(9).demo.scrollTop -= demo1.offsetHeight,重置為最初滾動開始的狀態。

(10).else {

  demo.scrollTop++

},否則的話,繼續向上滾動。

(11).var MyMar = setInterval(Marquee, speed),使用定時器函式呼叫Marquee函式。

(12).demo.onmouseover = function () {

  clearInterval(MyMar)

},當滑鼠懸浮,停止定時器函式的執行,那麼也就停止滾動了。

(13).demo.onmouseout = function () {

  MyMar = setInterval(Marquee, speed)

},當滑鼠離開,繼續滾動效果。

二.相關閱讀:

(1).document.getElementById()方法參閱document.getElementById()一章節。

(2).innerHTML屬性參閱JavaScript innerHTML一章節。

(3).offsetTop參閱JavaScript offsetTop一章節。

(4).scrollTop參閱JavaScript scrollTop一章節。

(5).offsetHeight參閱JavaScript offsetHeight一章節。

(6).setInterval()參閱JavaScript setInterval()一章節。

(7).onmouseover事件參閱JavaScript mouseover事件一章節。

(8).onmouseout事件參閱JavaScript mouseout事件一章節。

(9).clearInterval()參閱JavaScript clearInterval()一章節。

相關文章