找回密码
 入学

QQ登录

只需一步,快速开始

查看: 1872|回复: 11

教你用Javascript制作连续滚动的字幕

[复制链接]
发表于 2005-3-16 06:10:42 | 显示全部楼层 |阅读模式
<>我们一般都用Marquee标签控制元素的滚动。但是单向的Marquee滚动是不连续的,每滚完一幕,就会出现一次空白。而下面介绍中的滚动则是连续的,毫不间断。</P>
<>为了滚动能够“连续”,我们需要将字幕的内容复制多遍,直到内容的高度不小于滚动区高度的两倍。然后我们将溢出的滚动条隐藏掉,用代码控制滚动条向下移动(这时内容将向上移动)。当滚动条滚动到最下方时,理论上不能再往下滚动了,于是我们立刻调整滚动条,将它向上滚动到一个和当前画面一样的位置。结果我们看到的就是连续的滚动了。呵呵,说的就是这么简单,那做起来如何呢?我们看看是如何逐步实现的。</P>
<><div id=marquees <!-- 这些是字幕的内容,你可以任意定义 -- <a href=#链接一<a
<br <a href=#链接二<a
<br <a href=#链接三<a
<br <a href=#链接四<a
<br <!-- 字幕内容结束 --
<div
<!-- 以下是java-script代码 --
<script language=java-script
<!--
marqueesHeight=200; 内容区高度
stopscroll=false; 这个变量控制是否停止滚动
with(marquees){
noWrap=true; 这句表内容区不自动换行
style.width=0; 于是我们可以将它的宽度设为0,因为它会被撑大
style.height=marqueesHeight;
style.overflowY=hidden; 滚动条不可见
onmouseover=new Function(stopscroll=true); 鼠标经过,停止滚动
onmouseout=new Function(stopscroll=false); 鼠标离开,开始滚动
}
这时候,内容区的高度是无法读取了。下面输出一个不可见的层templayer,稍后将内容复制到里面:
document.write(<div id=templayer
style=positionabsolute;z-index1;visibilityhidden<div);
function init(){ 初始化滚动内容
多次复制原内容到templayer,直到templayer的高度大于内容区高度:
while(templayer.offsetHeight<marqueesHeight){
templayer.innerHTML+=marquees.innerHTML;
} 把templayer的内容的“两倍”复制回原内容区:
marquees.innerHTML=templayer.innerHTML+templayer.innerHTML;
设置连续超时,调用scrollUp()函数驱动滚动条:
setInterval(scrollUp(),10);
}
document.body.onload=init;
preTop=0; 这个变量用于判断滚动条是否已经到了尽头
function scrollUp(){ 滚动条的驱动函数
if(stopscroll==true) return; 如果变量stopscroll为真,则停止滚动
preTop=marquees.scrollTop; 记录滚动前的滚动条位置
marquees.scrollTop+=1; 滚动条向下移动一个像素
如果滚动条不动了,则向上滚动到和当前画面一样的位置
当然不仅如此,同样还要向下滚动一个像素(+1):
if(preTop==marquees.scrollTop){
marquees.scrollTop=templayer.offsetHeight-marqueesHeight+1;
}
}
--
<script
  
这样就完成了,感觉做起来也不难吧。</P>
<>可以看一下<a href="http://www.fei76.com" target="_blank" >www.fei76.com</A>的首页</P>
发表于 2005-3-16 06:53:06 | 显示全部楼层
<>不错!</P><>支持!</P><>收益拉!</P>
回复

使用道具 举报

发表于 2005-3-16 06:56:14 | 显示全部楼层
不过里面好象欠缺语句哦!
回复

使用道具 举报

发表于 2005-3-16 06:56:19 | 显示全部楼层
不过里面好象欠缺语句哦!
回复

使用道具 举报

 楼主| 发表于 2005-3-17 21:52:19 | 显示全部楼层
是吗?那你对照一下吧,<a href="http://www.fei76.com" target="_blank" >www.fei76.com</A> 首页就是这个
回复

使用道具 举报

发表于 2005-3-18 02:25:28 | 显示全部楼层
&lt;script language="javascript"&gt;
&lt;!--
marqueesHeight=200;
stopscroll=false;
with(marquees){
noWrap=true;
style.width=0;
style.height=marqueesHeight;
style.overflowX="visible";
style.overflowY="hidden";
onmouseover=new Function("stopscroll=true");
onmouseout=new Function("stopscroll=false");
}
document.write('&lt;div id="templayer"style="position:absolute;z-index:1;visibility:hidden"&gt;&lt;/div&gt;');
function init(){
while(templayer.offsetHeight&lt;marqueesHeight){
templayer.innerHTML+=marquees.innerHTML;
}
marquees.innerHTML=templayer.innerHTML+templayer.innerHTML;
setInterval("scrollUp()",25);
}
document.body.onload=init;
preTop=0;
function scrollUp(){
if(stopscroll==true) return;
preTop=marquees.scrollTop;
marquees.scrollTop+=1;
if(preTop==marquees.scrollTop){
marquees.scrollTop=templayer.offsetHeight-marqueesHeight+1;
}
}
--&gt;
&lt;/script&gt;
回复

使用道具 举报

发表于 2005-3-18 02:29:16 | 显示全部楼层
<> &lt;div id="marquees"&gt;</P><>如果这样用的话!需要关联!</P>
回复

使用道具 举报

 楼主| 发表于 2005-3-18 06:35:30 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>发条橙子</I>在2005-3-17 18:29:16的发言:</B>

<>&lt;div id="marquees"&gt;</P>
<>如果这样用的话!需要关联!</P></DIV>
<>
<>把需要滚动的放到这里边就OK了</P>
<>然后JS调用执行</P>
回复

使用道具 举报

 楼主| 发表于 2005-3-18 06:37:58 | 显示全部楼层
       &lt;div id="marquees"&gt;
          &lt;TABLE cellSpacing=0 cellPadding=0 width=178 align=center border=0&gt;
            &lt;TBODY&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#d1e8fe class="black"&gt; - &lt;FONT
            color=red&gt;关于今晚Snake讲座的公告&lt;/FONT&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=1 class="black"&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#f4faff class="black"&gt; - 大空间,高速,稳定,安全&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=1 class="black"&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#d1e8fe class="black"&gt; - 欢迎注册我社团会员&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=1 class="black"&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#f4faff class="black"&gt; - 论坛诚招版主正在进行中&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#d1e8fe class="black"&gt; - &lt;font color="red"&gt;周六我社团要举行召新活动&lt;/font&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=1 class="black"&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#f4faff class="black"&gt; - 免费会员诸侯制度&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=1 class="black"&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#d1e8fe class="black"&gt; - 注册论坛会员,&lt;span class="style1"&gt;免费送QQ&lt;/span&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=1 class="black"&gt;&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD height=24 bgColor=#f4faff class="black"&gt; - 上周社团部举办社团联谊&lt;/TD&gt;
              &lt;/TR&gt;
              &lt;TR&gt;
                &lt;TD bgColor=#aad3fc height=1&gt;&lt;/TD&gt;
              &lt;/TR&gt;
            &lt;/TBODY&gt;
          &lt;/TABLE&gt;
        &lt;/div&gt;
        &lt;script language="javascript"&gt;
&lt;!--
marqueesHeight=200;
stopscroll=false;
with(marquees){
noWrap=true;
style.width=0;
style.height=marqueesHeight;
style.overflowX="visible";
style.overflowY="hidden";
onmouseover=new Function("stopscroll=true");
onmouseout=new Function("stopscroll=false");
}
document.write('&lt;div id="templayer"style="position:absolute;z-index:1;visibility:hidden"&gt;&lt;/div&gt;');
function init(){
while(templayer.offsetHeight&lt;marqueesHeight){
templayer.innerHTML+=marquees.innerHTML;
}
marquees.innerHTML=templayer.innerHTML+templayer.innerHTML;
setInterval("scrollUp()",25);
}
document.body.onload=init;
preTop=0;
function scrollUp(){
if(stopscroll==true) return;
preTop=marquees.scrollTop;
marquees.scrollTop+=1;
if(preTop==marquees.scrollTop){
marquees.scrollTop=templayer.offsetHeight-marqueesHeight+1;
}
}
--&gt;
&lt;/script&gt;
回复

使用道具 举报

 楼主| 发表于 2005-3-18 06:40:15 | 显示全部楼层
请把以上代码复制到记事本里,然后把扩展名改为htm,用浏览器打开就可以看到效果了
回复

使用道具 举报

 楼主| 发表于 2005-8-2 05:30:50 | 显示全部楼层
<>继续补一些经验:<BR>防止滚动跑出外边,通常作两个一样的表格<BR>例如<BR>&lt;table&gt;<BR>  &lt;tr&gt;<BR>    &lt;td&gt;</P>
<>&lt;div&gt;<BR><FONT color=#c43c3c>      &lt;table&gt;<BR>        &lt;tr&gt;<BR>          &lt;td&gt;你好,这是最里边表格!&lt;/td&gt;<BR>        &lt;/tr&gt;<BR>      &lt;/table&gt;</FONT></P>
<><FONT color=#c43c3c>&lt;/div&gt;</FONT><BR>    &lt;/td&gt;<BR>  &lt;/tr&gt;<BR>&lt;/table&gt;</P>
回复

使用道具 举报

发表于 2009-4-10 09:27:44 | 显示全部楼层

好贴,顶一下楼主!

好贴,顶一下楼主!
















古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。---魔兽剑圣异界纵横
小游戏 极品家丁 龙蛇演义 恶魔法则 飞升之后 异界枪神 凡人修仙传 魔兽领主 超级农民 成人小游戏 极品公子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入学

本版积分规则

QQ|Archiver|手机版|小黑屋|校园天空成立于2004年2月24日 ( 陕ICP备08000078号-8 )

GMT+8, 2025-5-11 14:12 , Processed in 0.099825 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表