单行文字不断向上滚动特效
2014-04-21 13:07
351 查看
解决方案1
解决方案2
论坛地址:http://bbs.blueidea.com/thread-2848725-1-1.html
在实际测试中发现,上面代码不兼容火狐和谷歌浏览器(其他浏览器尚未测试),其原因是以为浏览器对dom元素的解析不同。
IE会忽略节点之间生成的空白文本节点(比如换行字符),而火狐则不会,所以取到的firstChild会存在差异。
做兼容性处理后的代码:
<script> var marqueeContent=new Array(); //滚动新闻 marqueeContent[1]='世界名牌理事会会员单位<br>'; marqueeContent[2]='2008中国十大美容美体连锁机构<br>'; marqueeContent[3]='2008中国十佳明星美容院<br>'; marqueeContent[4]='商务部特许经营备案企业<br>'; marqueeContent[0]='web3.0时代<br>'; var marqueeInterval=new Array(); //定义一些常用而且要经常用到的变量 var marqueeId=0; var marqueeDelay=2000; var marqueeHeight=20; function initMarquee() { var str=marqueeContent[0]; document.write('<div id=marqueeBox style="overflow:hidden;height:'+marqueeHeight+'px" onmouseover="clearInterval(marqueeInterval[0])" onmouseout="marqueeInterval[0]=setInterval(\'startMarquee()\',marqueeDelay)"><div>'+str+'</div></div>'); marqueeId++; marqueeInterval[0]=setInterval("startMarquee()",marqueeDelay); } function startMarquee() { var str=marqueeContent[marqueeId]; marqueeId++; if(marqueeId>=marqueeContent.length) marqueeId=0; if(marqueeBox.childNodes.length==1) { var nextLine=document.createElement('DIV'); nextLine.innerHTML=str; marqueeBox.appendChild(nextLine); } else { marqueeBox.childNodes[0].innerHTML=str; marqueeBox.appendChild(marqueeBox.childNodes[0]); marqueeBox.scrollTop=0; } clearInterval(marqueeInterval[1]); marqueeInterval[1]=setInterval("scrollMarquee()",20); } function scrollMarquee() { marqueeBox.scrollTop++; if(marqueeBox.scrollTop%marqueeHeight==(marqueeHeight-1)){ clearInterval(marqueeInterval[1]); } } initMarquee(); </script>
解决方案2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <style> div{width:200px;height:20px;overflow:hidden;} </style> </head> <body> <div id="container"><div>第一个标题</div><div>第二个标题</div><div>第三个标题</div></div> //这里的div之间不能留有空格或者换行 <script language="JavaScript"> function roll() { var container=document.getElementById('container'); var child = container.firstChild; if(child.style.marginTop=='') { child.style.marginTop='0px'; } if(parseInt(child.style.marginTop)==-child.offsetHeight) { child.style.marginTop = "0px"; container.appendChild(child); setTimeout("roll()",roll.stoptime) } else { if(parseInt(child.style.marginTop) - roll.step < -child.offsetHeight) { child.style.marginTop = - child.offsetHeight + "px"; } else { child.style.marginTop = parseInt(child.style.marginTop) - roll.step + "px"; setTimeout("roll()",roll.timeout) } } } roll.timeout = 20; //时长 roll.step = 1; //步伐 roll.stoptime = 2000; //停留时间 roll(); </script> </body> </html>
论坛地址:http://bbs.blueidea.com/thread-2848725-1-1.html
在实际测试中发现,上面代码不兼容火狐和谷歌浏览器(其他浏览器尚未测试),其原因是以为浏览器对dom元素的解析不同。
IE会忽略节点之间生成的空白文本节点(比如换行字符),而火狐则不会,所以取到的firstChild会存在差异。
做兼容性处理后的代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <style> div{width:200px;height:20px;overflow:hidden;} </style> </head> <body> <!--这里的html代码可以任意格式化--> <div id="container"> <div>第一个标题</div> <div>第二个标题</div> <div>第三个标题</div> </div> </body> <script language="JavaScript"> //获取第一个子元素 function get_firstchild(obj) { var child=obj.firstChild; while (child.nodeType!=1) { child=child.nextSibling; } return child; } function roll() { var container=document.getElementById('container'); var child = get_firstchild(container); if(child.style.marginTop=='') { child.style.marginTop='0px'; } if(parseInt(child.style.marginTop)==-child.offsetHeight) { child.style.marginTop = "0px"; container.appendChild(child); setTimeout("roll()",roll.stoptime) } else { if(parseInt(child.style.marginTop) - roll.step < -child.offsetHeight) { child.style.marginTop = - child.offsetHeight + "px"; } else { child.style.marginTop = parseInt(child.style.marginTop) - roll.step + "px"; setTimeout("roll()",roll.timeout) } } } roll.timeout = 20; //时长 roll.step = 1; //步伐 roll.stoptime = 2000; //停留时间 //执行 roll(); </script> </html>
相关文章推荐
- 实现不间断向上滚动文字的特效
- JS实现单行文字不间断向上滚动的方法
- msclass实例 jquery 通用滚动特效,文字单行,多行停留滚动,图文上下左右滚动
- 文字不断滚动代码(向上滚动)
- 单行文字向上无间断的滚动
- js实现文字定时向上滚动效果_文字特效_js网页特效代码
- 不间断向上滚动的文字特效(滚动一行暂停一段时间再滚动)(
- jQuery实现单行文字间歇向上滚动源代码
- 文字向上滚动特效,在一行中切换,可以用在新闻或者公告中
- jquery单行文字向上滚动效果
- 单行文字间歇向上滚动,放上光标就停,移开继续滚动。
- jquery单行文字向上滚动效果示例
- JS实现单行文字不间断向上滚动的方法
- jquery单行文字向上滚动效果的实现代码
- 单行文字向上跑马灯滚动显示
- jquery单行文字向上滚动效果的实现代码
- javascript 单行向上滚动文字
- jquery单行文字向上滚动效果示例
- 单行文字向上循环滚动
- jquery 通用滚动特效,文字单行,多行停留滚动,图文上下左右滚动