ShiningDan的博客

网页组件制作之信息滚动效果

在该笔记中将学到列表展示中信息滚动效果的方法与展示效果

本系列的是参考慕课网 vivian老师的视频,仅供个人查阅使用,具体讲解推荐参考视频。

原来 HTML 中提供了一个专门用来做信息滚动的标签叫 marquee,但是这个标签将要被禁止使用了,所以不建议继续使用这个标签做信息滚动。

无缝滚动的制作

无缝滚动的原理:想要实现内容的无缝滚动,可以在显示内容下面再拷贝一次显示内容,即有两个包含相同内容的容器实现滚动的衔接,就可以实现无缝滚动的效果。

制作效果如下:


参考代码如下:

<html>
    <head>
        <title>滚动效果制作</title>
        <meta charset="utf-8 ">
        <style type="text/css">
            *{margin: 0;padding: 0;}
            .wrap{border: 1px solid #ccc;width: 300px;height: 100px;margin: 100px auto;overflow: hidden;font-size: 12px;}
            .wrap ul{margin-left: 40px;list-style: none;}
            .wrap li{margin: 5px;}
        </style>
        <script>
            window.onload = function(){
            let col1 = document.getElementById("col1");
            let col2 = document.getElementById("col2");
            let scrollWrap = document.getElementById("scroll-wrap");
            col2.innerHTML = col1.innerHTML;

            let tmp = setInterval(function(){
                if(scrollWrap.scrollTop >= col1.scrollHeight){
                    scrollWrap.scrollTop = 0;
                }
                scrollWrap.scrollTop++;
            }, 50);

            scrollWrap.onmouseover = function(){
                clearInterval(tmp);
            }
            scrollWrap.onmouseout =function(){
                tmp = setInterval(function(){
                    if(scrollWrap.scrollTop >= col1.scrollHeight){
                        scrollWrap.scrollTop = 0;
                    }
                    scrollWrap.scrollTop++;
                }, 50);
            }
        }
        </script>
    </head>
    <body>
        <div class="wrap" id="scroll-wrap">
            <ul id="col1">
                <li>这是滚动展示第一行</li>
                <li>这是滚动展示第二行</li>
                <li>这是滚动展示第三行</li>
                <li>这是滚动展示第四行</li>
                <li>这是滚动展示第五行</li>
                <li>这是滚动展示第六行</li>
                <li>这是滚动展示第七行</li>          
            </ul>
            <ul id="col2">

            </ul>
        </div>
    </body>
</html>

间歇滚动的制作

实现效果:当滚动条中有多个信息进行滚动时,间歇滚动可以每滚动过一条信息以后,停留一段时间,然后再滚动过下一条信息。

实现方法:每次完成一次滚动以后,使用 setTimeout 激活下一次滚动。

<html>
    <head>
        <title>滚动效果制作</title>
        <meta charset="utf-8 ">
        <style type="text/css">
            *{margin: 0;padding: 0;}
            .wrap{border: 1px solid #ccc;width: 300px;height: 100px;margin: 100px auto;overflow: hidden;font-size: 12px;}
            .wrap ul{margin-left: 40px;list-style: none;}
            .wrap li{height: 20px;line-height: 20px;display: block;}
        </style>
        <script>
            window.onload = function(){
            let col1 = document.getElementById("col1");
            let col2 = document.getElementById("col2");
            let scrollWrap = document.getElementById("scroll-wrap");
            col2.innerHTML = col1.innerHTML;
            scrollWrap.scrollTop = 0;
            let tmp;

            function scrollOneRow(){
                tmp = setInterval(function(){
                    scrollWrap.scrollTop++;
                    console.log(scrollWrap.scrollTop)
                    if(parseInt(scrollWrap.scrollTop) % 20 == 0) {
                        clearInterval(tmp);
                        setTimeout(startMove, 2000);
                    }else{
                        if(scrollWrap.scrollTop >= col1.scrollHeight){
                            scrollWrap.scrollTop = 0;
                        }
                    }
                }, 100);
            }
            function startMove(){
                scrollOneRow();
            }

            scrollWrap.onmouseover = function(){
                clearInterval(tmp);
            }
            scrollWrap.onmouseout = function(event){
                if(event.target.tagName.toLowerCase() == "div") {
                    startMove();
                }
            };
            startMove();
        }
        </script>
    </head>
    <body>
        <div class="wrap" id="scroll-wrap">
            <ul id="col1">
                <li>这是滚动展示第一行</li>
                <li>这是滚动展示第二行</li>
                <li>这是滚动展示第三行</li>
                <li>这是滚动展示第四行</li>
                <li>这是滚动展示第五行</li>
                <li>这是滚动展示第六行</li>
                <li>这是滚动展示第七行</li>          
            </ul>
            <ul id="col2">

            </ul>
        </div>
    </body>
</html>