使用JavaScript实现连续滚动字幕效果的方法


Posted in Javascript onJuly 07, 2015

我们一般都用Marquee标签控制元素的滚动。但是单向的Marquee滚动是不连续的,每滚完一幕,就会出现一次空白。而下面介绍中的滚动则是连续的,毫不间断。

下面为你介绍这是如何实现的。

为了滚动能够“连续”,我们需要将字幕的内容复制多遍,直到内容的高度不小于滚动区高度的两倍。然后我们将溢出的滚动条隐藏掉,用代码控制滚动条向下移动(这时内容将向上移动)。当滚动条滚动到最下方时,理论上不能再往下滚动了,于是我们立刻调整滚动条,将它向上滚动到一个和当前画面一样的位置。结果我们看到的就是连续的滚动了。呵呵,说的就是这么简单,那做起来如何呢?我们看看是如何逐步实现的。

<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="position:absolute;z-index:1;visibility:hidden"></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>

这样就完成了,感觉做起来也不难吧。

Javascript 相关文章推荐
javascript 极速 隐藏/显示万行表格列只需 60毫秒
Mar 28 Javascript
jquery 弹出层实现代码
Oct 30 Javascript
JQquery的一些使用心得分享
Aug 01 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
jQuery中slideUp()方法用法分析
Dec 24 Javascript
大型JavaScript应用程序架构设计模式
Jun 29 Javascript
判断js的Array和Object的实现方法
Aug 29 Javascript
angular+ionic 的app上拉加载更新数据实现方法
Jan 16 Javascript
jQuery实现的简单悬浮层功能完整实例
Jan 23 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
Apr 13 Javascript
vue.js在标签属性中插入变量参数的方法
Mar 06 Javascript
js实现百度登录窗口拖拽效果
Mar 19 Javascript
理解JavaScript的变量的入门教程
Jul 07 #Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 #Javascript
javascript实现控制div颜色
Jul 07 #Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 #Javascript
JavaScript中判断两个字符串是否相等的方法
Jul 07 #Javascript
javascript中数组方法汇总
Jul 07 #Javascript
jQuery原型属性和原型方法详解
Jul 07 #Javascript
You might like
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
Javascript调用C#代码
2011/01/17 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python字典的核心底层原理讲解
2019/01/24 Python
C++程序员求职信范文
2014/04/14 职场文书
企业文化标语大全
2014/06/10 职场文书
工程索赔意向书
2014/08/30 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
党支部承诺书
2015/01/20 职场文书
召开会议通知范文
2015/04/15 职场文书
运动会100米广播稿
2015/08/19 职场文书
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技