使用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移动div层-javascript 拖动层
Mar 22 Javascript
解决jquery的.animate()函数在IE6下的问题
Dec 03 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
jquery操作HTML5 的data-*的用法实例分享
Aug 17 Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
Nov 19 Javascript
JS实现探测网站链接的方法【测试可用】
Nov 08 Javascript
js实现自定义进度条效果
Mar 15 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
原生JS实现京东查看商品点击放大
Dec 21 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.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
10款实用的PHP开源工具
2015/10/23 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
浅谈PHP的反射API
2017/02/26 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
Python处理Excel文件实例代码
2017/06/20 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
django的ORM模型的实现原理
2019/03/04 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
职业技术学校毕业生推荐信
2013/12/03 职场文书
大学应届生的自我评价
2014/03/06 职场文书
售后服务承诺书范文
2014/03/26 职场文书
大学班级学风建设方案
2014/05/01 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
战友聚会策划方案
2014/06/13 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
安全保证书
2015/01/16 职场文书
毕业论文致谢词
2015/05/14 职场文书
计算机教师工作总结
2015/08/13 职场文书
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS