现在,众多网站中采用一种可以垂直滚动的新闻列表,每一个列表项都作为一个新闻标题。让静态的列表滚动起来可以加强页面的动感效果,列表项的滚动一般适用于实时更新的网站内容标题。本节就来探讨如何让静态列表滚动起来,出现滚动新闻的效果。静态页面如图4.5所示。
使用jQuery产生滚动列表的原理是:利用隐藏与添加这两个动作。即首先需要取得列表的滚动区间,然后获取滚动内容的第一列表项并隐藏第一列表项,将隐藏的第一列表项添加到整个列表结尾。
其中,使用到了jQuery的hover()、find()、height()、animate()、appendTo()、trigger()函数,以及:first属性、mouseleave事件和JavaScript的clearInterval()、setInterval()函数,如表4.1所示。
(1)jQuery的animate()函数--自定义动画
该函数负责创建自定义动画。其语法形式如下:
- 语法形式一 animate(params,option)
- 语法形式二 animate(params,[duration],[easing],[fn])
表4.1 列表项的滚动所用到的函数
| 名 称 | 功 能 | 语 法 | 说 明 | |
| jQuery函数 | ||||
| hover() | 自定义方法,模仿鼠标的悬停与移出事件 | hover(over,out) | 参数中over表示鼠标的悬停事件处理函数,out表示鼠标的移出事件处理 函数 | |
| find() | 搜索所有与指定表达式匹配的元素 | find(expr) | 参数expr表示用于查找的表达式,这个函数是用于找出正在处理的元素的后代元素的适宜方法 | |
| height() | 取得或设置正在处理的元素的高度 |
语法形式一:height() 语法形式二:height(val) |
无参函数表示取得元素高度,有参函数表示设置元素高度,默认单位为像素 | |
| appendTo() | 把所有匹配的元素加入到另一个指定的元素集合中 | appendTo(content) | 参数content表示指定的元素集合 | |
| trigger() | 在每一个匹配的元素上触发指定的事件 | trigger(type,[data]) | 该函数即可以触发固有事件也可以触发自定义事件。参数type表示事件对象或者触发的事件类型,data表示传递给事件处理函数的附加参数,以数组形式存在 | |
| mouseleave | 代替原有的JavaScript的onmouseout事件,但是修正了其中的一些错误 | mouseleave(fn) | 此事件不会像onmouseout事件一样,在不同的子元素间移动并不会触发它。参数fn表示事件处理函数 | |
| JavaScript函数 | ||||
| clearInterval() | 取消周期方法调用 | clearInterval(val) | 参数val是函数setInterval返回的一个timer ID | |
该属性获取当前匹配元素的第一个子元素。其语法形式如下:
- Selector:first
该函数将不停地按照指定的周期调用函数或者表达式,直到窗口关闭或者调用了clearInterval()函数。其语法形式如下:
- setInterval(fn,millsecond)
1.功能实现
实现列表项滚动的步骤如下。
(1)取得整个列表的滚动区间。
(2)使用jQuery的hover()函数分别响应鼠标的悬停与离开事件。
(3)在鼠标的悬停时间中获取滚动内容的第一列表项并隐藏第一列表项,将隐藏的第一列表项添加到整个列表结尾。
(4)设定滚动间隔,以及滚动过程中动画持续时间。
首先,加入CSS样式定义:
- 1<style type="text/CSS">
- 2 ul.scrollline{height:90px;}
- 3</style>
然后,把jQuery库引入进来:
- <script src="jslib/jquery-1.6.min.js" type="text/JavaScript"></script>
最后,添加完整代码如下:
- 1<script language="JavaScript">
- 2 $(function(){
- 3 var area=$('ul.scrollline'); //取得滚动区域
- 4 var timespan=1000; //定义滚动时间间隔
- 5 var timeID; //需要清除的动画
- 6 area.hover(function(){ //自定义鼠标悬停与移出事件处理
- 7 clearInterval(timeID);
- //当鼠标在滚动区域中时,停止滚动,移出事件处理
- 8 },function(){ //鼠标悬停事件处理
- 9 timeID=setInterval(function(){
- //设置滚动时间间隔及滚动动作
- 10 var moveline=area.find('li:first');
- //最先需要获取列表当前的第一行,这个位置很重要
- 11 var lineheight=moveline.height(); //取得每次滚动高度
- //通过取负margin值,隐藏第一行
- 12 moveline.animate({marginTop:-lineheight+'px'},500,
- function(){
- //隐藏后,将该行的margin值置零,并添加到列表尾部,实现循环滚动
- 13 moveline.CSS('marginTop',0).appendTo(area);
- 14 })
- 15 },timespan) //滚动间隔时间取决于timespan
- 16 }).trigger('mouseleave');
- //函数载入时,模拟执行mouseleave,即自动滚动
- 17 });
- 18</script>
因为这种特效属于动态形式,所以这里不给出效果图片,请读者自行测试。



