js實現滾動條自動滾動(scrollTop)

效果類似於直播網站的評論,會一條接着一條向上 go out ;

 

js部分很簡單:通過控制scrollTop的值來實現自動滾動效果;

                        很重要兩點:    1、scrollTop的值不可以加單位,謹記!

                                                  2、網頁縮放比例會影響效果實現(下面具體說);

                        scrollTop需要注意的三點:1、如果這個元素沒有被溢出,scrollTop爲0

                                                                   2、設置的scrollTop值小於0,則scrollTop的值爲0

                                                                   3、如果設置scrollTop的值超出了這個容器滾動的值,

                                                                         則scrollTop的值爲容器最大值

js部分:

(function () {
    // 獲取父盒子(肯定有滾動條)
    var parent = document.getElementById('parent');
    // 獲取子盒子(高度肯定比父盒子大)
    var child1 = document.getElementById('child1');
    var child2 = document.getElementById('child2');
    // 第一個子盒子內容複製一遍給第二個子盒子,產生循環視覺,輔助作用
    // 可以註釋下這條代碼,看會出現什麼情況
    child2.innerHTML = child1.innerHTML;
    // 設置定時器,時間即爲滾動速度
    setInterval(function () {
       if(parent.scrollTop >= child1.scrollHeight) {
           parent.scrollTop = 0;
       } else {
           // 如果存在網頁縮放,很有可能沒有效果,但是else部分的代碼會執行
           // 原因:剛纔講到的scrollTop三個注意中標黃的一條
           // 設置scrollTop的值小於0,即scrollTop被設爲0
           // 可以縮放跑一下,然後不刷新的狀態下恢復百分之百跑一下,再縮放,打印scrollTop的值
           // 你會發現正常尺寸執行時打印的第一個值不是加法,而是減法,即scrollTop++增加負值
           // 這樣的話就對應上了scrollTop的注意點了,增加的值小於0,就被設爲0
           parent.scrollTop++;
       }
    }, 20);
})()

下面是完整demo,拉走直接看效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>autoScroll</title>
</head>
<style>
    .parent {
        width: 300px;
        height: 200px;
        margin: 0 auto;
        background: #242424;
        overflow-y: scroll;
    }
    /*設置的子盒子高度大於父盒子,產生溢出效果*/
    .child {
        height: auto;
    }
    .child li {
        height: 50px;
        margin: 2px 0;
        background: #009678;
    }
</style>
<body>
    <div id="parent" class="parent">
        <div id="child1" class="child">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </div>
        <div id="child2" class="child"></div>
    </div>
    <script type="text/javascript">
        (function () {
            var parent = document.getElementById('parent');
            var child1 = document.getElementById('child1');
            var child2 = document.getElementById('child2');
            child2.innerHTML = child1.innerHTML;
            setInterval(function () {
               if(parent.scrollTop >= child1.scrollHeight) {
                   parent.scrollTop = 0;
               } else {
                   parent.scrollTop++;
               }
            }, 20);
        })()
    </script>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章