网络编程
位置:首页>> 网络编程>> JavaScript>> javascript之循环停顿上下滚动

javascript之循环停顿上下滚动

  发布时间:2024-11-19 19:02:57 

标签:javascript之循环停顿上下滚动

extractNodes函数解决各浏览器的节点计算问题。FireFox把换行符也算成一个节点,很不合理啊。
先用appendChild复制前面的四个节点到底部,使得头尾是一样的内容,以作后用。记得做flash补间循环运动的时候就是这样要头尾一样。
通过setInterval隔时运行rolltxt函数。
rolltxt函数首先计算的是间隔停顿的高度,滚动多高就要停顿一下,这个高度我也不知道怎么算出来的,跟CSS有关系,我是试出来的  
用求余数的方法可以判断是否已经滚过了所设的间隔高度。如果余数不等于0就继续加1滚动。如果余数为0说明已经滚动了所设的间隔高度,要在这里停顿了。
设一个变量settime来计算时间,加到50的时候settime清零,滚动继续,这个50我没算过单位是什么,反正随我高兴。
差不到这样已经能停顿滚动了,但是还有一个问题,没有限定最高值,滚动一直滚啊滚啊,当然是会出毛病了。滚到哪再重头开始滚好呢?当然是滚到尾部跟头一样位置的时候,网页高度减去可见高度就对了,为什么这么算?这个自己比划比划就知道了。
循环停顿上下滚动已经大功告成了,不信你试试 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>循环停顿上下滚动</title> <style type="text/css"> #block2{height:23px;width:500px;border:#ccc 1px solid;font-size:12px;text-align:center;} #block2 ul{list-style:outside none none;height:17px;padding:3px 0;overflow:hidden;margin:0;} #block2 ul li{float:left;display:inline;margin:2px 0;height:14px;width:24.9%;} #block2 ul li a{text-decoration:none;} </style> </head> <body> <div id="block2">   <ul id="rolltxt">     <li>asp之家1</li>     <li>asp之家2</li>     <li>asp之家3</li>     <li>asp之家4</li>     <li>asp之家5</li>     <li>asp之家6</li>     <li>asp之家7</li>     <li>asp之家8</li>     <li>asp之家9</li>     <li>asp之家10</li>     <li>asp之家11</li>     <li>asp之家12</li>     <li>asp之家13</li>     <li>asp之家14</li>     <li>asp之家15</li>     <li>asp之家16</li>   </ul> <script type="text/javascript">  function extractNodes(pNode){     if(pNode.nodeType == 3)return null;     var node,nodes = new Array();     for(var i=0;node= pNode.childNodes[i];i++){         if(node.nodeType == 1)nodes.push(node);     }     return nodes; } var obj=document.getElementById("rolltxt"); for(i=0;i<4;i++){     obj.appendChild(extractNodes(obj)[i].cloneNode(true)); } settime=0; var t=setInterval(rolltxt,50); function rolltxt(){     if(obj.scrollTop % (obj.clientHeight-5) ==0){         settime+=1;         if(settime==50){             obj.scrollTop+=1;             settime=0;         }     }else{         obj.scrollTop+=1;         if(obj.scrollTop==(obj.scrollHeight-obj.clientHeight)){             obj.scrollTop=0;         }     } } obj.onmouseover=function(){clearInterval(t)} obj.onmouseout=function(){t=setInterval(rolltxt,50)} </script> </div> </body> </html>
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com