用javascript代替marquee的滚动字幕效果代码

时间:2024-05-22 10:36:09 

由于marquee标签现在用得是越来越少了,所以滚动效果的做法大多也都改用javascript来实现了,至于不明白为什么不直接用marquee标签的朋友,不妨先阅读一下这篇文章。
第一种方法:用javascript模拟marquee的做法。
出处:网易游戏

<!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">  </style> </head> <body> <h4>滚动新闻</h4> <script language="JavaScript" type="text/javascript"> var marqueeContent=new Array(); marqueeContent[0]="用"梦幻密保"快速取回帐号密码"; marqueeContent[1]="网易将军令官方网站"; marqueeContent[2]="最新壁纸下载"; marqueeContent[3]="最新屏保下载"; 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;width:250px;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(document.getElementById("marqueeBox").childNodes.length==1) {     var nextLine=document.createElement('DIV');     nextLine.innerHTML=str;     document.getElementById("marqueeBox").appendChild(nextLine);     }     else {         document.getElementById("marqueeBox").childNodes[0].innerHTML=str;         document.getElementById("marqueeBox").appendChild(document.getElementById("marqueeBox").childNodes[0]);         document.getElementById("marqueeBox").scrollTop=0;     }     clearInterval(marqueeInterval[1]);     marqueeInterval[1]=setInterval("scrollMarquee()",20); } function scrollMarquee() {     document.getElementById("marqueeBox").scrollTop++;     if(document.getElementById("marqueeBox").scrollTop%marqueeHeight==(marqueeHeight-1)){     clearInterval(marqueeInterval[1]);     } } initMarquee(); </script> </body> </html>



个人观点:从web可用性角度上讲,我们在采用这段代码的同时要考虑到noscript环境下的可用性,建议将内容还是以下边代码的形式出现在页面中。如:


<div id="newslist">
<ul>
<li><a href=http://xyq.163.com/news/2006/11/2-2-20061102170913.html target=_blank>用“梦幻密保”快速取回帐号密码</a></li>
<li><a href=http://ekey.163.com/ target=_blank>网易将军令官方网站</a></li>
<li><a href=http://xyq.163.com/download/wallpaper.htm target=_blank>最新壁纸下载</a></li>
<li><a href=http://xyq.163.com/download/around.htm target=_blank>最新屏保下载</a></li>
</ul>
</div>


然后用脚本去设置隐藏,将列表项读进javascript中定义的数组中。即可达到在noscript环境下也能正常看到内容列表。
第二种方法:这个更强,能自动根据内容自动进行左右滚动,解决了宽度太小造成的截取问题。
原文作者:风动人

<html> <head> <title> SCROLL </title> <style type="text/css"> #infozone{font-size:12px;color:#aa6;overflow:hidden;width:100px;height:20px;} #infozone div{height:20px;line-height:20px;white-space:nowrap;overflow:hidden;} </style> <script type="text/javascript"> var tc; window.onload=function(){     var o=document.getElementById('infozone');hscroll(o);     window.setInterval(function(){window.clearTimeout(tc);o.firstChild.style.marginLeft='0px';scrollup(o,20,0);},10000); } function scrollup(o,d,c){     if(d==c){         var t=o.firstChild.cloneNode(true);         o.removeChild(o.firstChild);o.appendChild(t);         t.style.marginTop=o.firstChild.style.marginTop='0px';         hscroll(o);     }     else{         ch=false;var s=3,c=c+s,l=(c>=d?c-d:0);         o.firstChild.style.marginTop=-c+l+'px';         window.setTimeout(function(){scrollup(o,d,c-l)},50);     } } function hscroll(o){     var w1=o.firstChild.offsetWidth,w2=o.offsetWidth;     if(w1<=w2)return;     tc=window.setTimeout(function(){hs(o,w1-w2,0,w1-w2)},3500); } function hs(o,d,c,p){     c++;var t=(c>0?-c:c);o.firstChild.style.marginLeft=t+'px';     if(c==d){if(d==0){tc=window.setTimeout(function(){hs(o,p,0,p)},2500);}else tc=window.setTimeout(function(){hs(o,0,-p,p)},3500);}     else tc=window.setTimeout(function(){hs(o,d,c,p)},5); } </script> </head> <body> <div id="infozone"><div>温岚 - 屋顶(周杰伦 对唱版)</div><div>范玮琪 - 那些花儿</div><div>张韶涵 - 娃娃</div><div>孙楠&amp;韩红 - 美丽的神话</div></div> </body> </html>



个人观点:从xhtml的语义化的角度看,页面内容中滥用div标签现象比较严重,可改成ul/li形式。

第三种是最精简的,代码非常少。
原文作者:cityvoice

<!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 type="text/css">     #newslist{         background:#f7f7f7;border:1px solid silver;padding:1px;height:20px;line-height:20px;width:300px;     }     #contain{         font-size:12px;overflow:hidden;list-style:none;width:300px;height:20px;margin:0px;padding:0;     }     #contain li{         height:20px;line-height:20px;white-space:nowrap;overflow:hidden;     } </style>  </HEAD>  <BODY>     <div id="newslist">         <ul id="contain">             <li>温岚 - 屋顶(左右摆动)</li>             <li>范玮琪 - 那些花儿</li>             <li>张韶涵 - 娃娃</li>             <li>孙楠&amp;韩红 - 美丽的神话</li>             <li>张信哲 - 白月光</li>         </ul>     </div> <SCRIPT LANGUAGE="JavaScript"> function xx(){ var container=document.getElementById("contain"); container.appendChild(container.firstChild); } setInterval("xx()",3000); </SCRIPT>  </BODY> </HTML>



个人观点:太短小精干了,如果你喜欢简单的话,这个也可以考虑的。 

标签:用javascript代替marquee的滚动字幕效果代码
0
投稿

猜你喜欢

  • 详细分析Python可变对象和不可变对象

    2021-03-10 22:50:10
  • 详解PHP中的mb_detect_encoding函数使用方法

    2023-11-14 19:48:45
  • 基于Python编写微信清理工具的示例代码

    2022-03-04 09:02:54
  • Python中sub()的用法说明

    2023-08-04 14:29:32
  • 详解python的super()的作用和原理

    2022-07-06 15:55:37
  • PHP使用缓存即时输出内容(output buffering)的方法

    2023-11-23 20:12:11
  • 浅谈pycharm使用及设置方法

    2023-12-18 21:17:47
  • Django REST Swagger实现指定api参数

    2023-03-10 05:48:58
  • Golang的性能优化和调试技巧

    2024-04-25 15:30:24
  • python+selenium+Chrome options参数的使用

    2023-08-06 00:13:45
  • SQL窗口函数之排名窗口函数的使用

    2024-01-26 18:49:31
  • mysql中 datatime与timestamp的区别说明

    2024-01-21 14:45:53
  • Python编程基础之字典

    2021-10-02 13:34:56
  • MYSQL教程:如何选择正确的数据列类型

    2009-02-27 16:05:00
  • 设计和布局之间的思考

    2008-10-09 13:06:00
  • 纯python实现机器学习之kNN算法示例

    2021-05-02 22:57:17
  • 爬虫框架 Feapder 和 Scrapy 的对比分析

    2022-03-31 00:02:17
  • Python教程教你如何去除背景

    2023-01-08 17:19:40
  • Datawhale练习之二手车价格预测

    2022-02-04 21:35:56
  • Python tkinter库绘制春联和福字的示例详解

    2022-03-05 06:29:04
  • asp之家 网络编程 m.aspxhome.com