无缝滚动的制作

来源:互联网 发布:win10无法卸载软件 编辑:程序博客网 时间:2024/05/02 00:39

一.标签 marquee
属性:
1.滚动方向direction(包括4个值:up、 down、 left和 right)
2.滚动方式behavior(scroll:循环滚动,默认效果; slide:只滚动一次就停止; alternate:来回交替进行滚动)
3.滚动速度scrollamount(滚动速度是设置每次滚动时移动的长度,以像素为单位)
4.滚动延迟scrolldelay(设置滚动的时间间隔,单位是毫秒)
5.滚动循环loop(默认值是-1,滚动会不断的循环下去)
6.滚动范围width、height
7.滚动背景颜色bgcolor
8.空白空间hspace、vspace
常用事件:
onmouseover=“this.stop()”;
onmouseout=“this.start()”;
二、js 无缝滚动
原理:(以向上滚动为例)克隆一个相同的内容,紧贴着原内容区域向上滚动以实现消除空白区域,当原内容完全滚出区域时,回到原始位置继续滚动。

知识点:innerHTML,scrollTop,offsetHeight元素显示的高度,scrollHeight总共滚动高度;setInterval(),clearInterval()

1.简单布局
html:

<div  id="marqBox">    <ul id="con1">        <li><a href="#">1.学会html5 </a><span>2013-09-18</span></li>        <li><a href="#">2.tab页面切换效果</a><span>2013-10-09</span></li>        <li><a href="#">3.按钮制作</a><span>2013-10-21</span></li>        <li><a href="#">4.HTML+CSS基础课程</a><span>2013-11-01</span></li>        <li><a href="#">5.分页页码制作</a><span>2013-11-06</span></li>        <li><a href="#">6.导航条菜单的制作</a><span>2013-11-08</span></li>        <li><a href="#">7.信息列表制作</a><span>2013-11-15</span></li>        <li><a href="#">8.下拉菜单制作</a><span>2013-11-22</span></li>        <li><a href="#">9.如何实现“新手引导”效果</a><span>2013-12-06</span></li>    </ul>    <ul id="con2">   //用于克隆    </ul></div>

css样式:

<style>body {    font-size: 12px;    line-height: 24px;    text-algin: center;        /* 页面内容居中 */}* {    margin: 0px;    padding: 0px;            /*  去掉所有标签的marign和padding的值  */}ul {    list-style: none;           /*  去掉ul标签默认的点样式  */}a {    color: #333;    text-decoration: none;     /* 超链接样式 */}a:hover {    color: #ff0000;}#marqBox {    height: 144px;    width: 335px;    margin-left: 25px;    margin-top: 10px;    overflow: hidden;    /*  这个一定要加,超出的内容部分要隐藏,免得撑高中间部分 */}#marq ul li {    height: 24px;}#marq ul li a {    width: 180px;    float: left;    display: block;    overflow: hidden;    text-indent: 15px;    height: 24px;}#marq ul li span {    float: right;    color: #999;}

2 . js实现克隆与滚动
首先,将原滚动内容尾部实现克隆,弥补滚动空白
其次,设置定时器进行滚动,当原滚动内容刚好滚出区域时,置回原位

<script>        var area = document.getElementById('marqBox');        var con1 = document.getElementById('con1');        var con2 = document.getElementById('con2');        con2.innerHTML = con1.innerHTML;        area.scrollTop = 0;        var timer=50;  //定时器间隔时长        function scrollUp(){        if(area.scrollTop>=area.scrollHeight/2){            area.scrollTop = 0;    //判断原内容彻底滚出区域时,恢复原位        }        else{            area.scrollTop++;        }    };    setInterval('scrollUp()',timer);

3 . 鼠标悬停事件
注意:移除鼠标时要先关闭定时器再开启,避免重复绑定

    var myScroll=setInterval('scrollUp()',timer);    area.onmouseover=function(){        clearInterval(myScroll);    }    area.onmouseout=function(){        clearInterval(myScroll);        myScroll=setInterval('scrollUp()',timer);    }

4,间歇性滚动
首先,在滚动函数中判断“当卷出高度等于li行高的整数倍时,停止定时器,并延迟2秒再开始滚动”
其次,新开始滚动的函数中坐标加一,并需要重新开启定时器;

var myScroll=setInterval('scrollUp()',timer);var LiHeight=24;function scrollUp(){    if(area.scrollTop>=area.scrollHeight/2){            area.scrollTop = 0;    }    else{        area.scrollTop++;        if(area.scrollTop%LiHeight==0){        clearInterval(myScroll);        setTimeout("starMove()",2000);}    }};function starMove(){    area.scrollTop++;    myScroll=setInterval('scrollUp()',timer);}

4,间歇性滚动加入鼠标监听事件

function scrollUp(){        if(area.scrollTop>=area.scrollHeight/2){            area.scrollTop = 0;        }        else {            area.scrollTop++;            if (area.scrollTop % LiHeight == 0) {                clearInterval(myScroll);                var timeoutProcess=setTimeout("starMove()", 2000);                area.addEventListener("mouseover",stopGoal);//监听停顿时的鼠标移入事件                function stopGoal()                {                    clearTimeout(timeoutProcess);                }            }        }    };

完整代码:

<script >    var area = document.getElementById('moocBox');    var con1 = document.getElementById('con1');    var con2 = document.getElementById('con2');    con2.innerHTML = con1.innerHTML;    area.scrollTop = 0;    var timer=50;  //定时器间隔时长    var myScroll=setInterval('scrollUp()',timer);    var LiHeight=24;    area.onmouseover=function(){        clearInterval(myScroll);    }    area.onmouseout=function(){        clearInterval(myScroll);        myScroll=setInterval('scrollUp()',timer);    }    function scrollUp(){        if(area.scrollTop>=area.scrollHeight/2){            area.scrollTop = 0;        }        else {            area.scrollTop++;            if (area.scrollTop % LiHeight == 0) {                clearInterval(myScroll);                var timeoutProcess=setTimeout("starMove()", 2000);                area.addEventListener("mouseover",stopGoal);                function stopGoal()                {                    clearTimeout(timeoutProcess);                }            }        }    };    function starMove(){        clearInterval(myScroll);        area.scrollTop++;        myScroll=setInterval('scrollUp()',timer);    }</script>
0 0
原创粉丝点击