使用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下利用arguments实现string.format函数
Aug 24 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
Javascript实现多彩雪花从天降散落效果的方法
Feb 02 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
浅谈Postman解决token传参的问题
Mar 31 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
vue-socket.io跨域问题有效解决方法
Feb 11 Javascript
jquery实现垂直手风琴导航栏
Feb 18 jQuery
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
理解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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
php实现简单爬虫的开发
2016/03/28 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
JS中的三个循环小结
2017/06/20 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
python pickle 和 shelve模块的用法
2013/09/16 Python
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
学生档案自我鉴定
2013/10/07 职场文书
动物学专业毕业生求职信
2013/10/11 职场文书
公证处委托书
2015/01/28 职场文书
部门主管竞聘书
2015/09/15 职场文书
古诗之感恩老师
2019/10/24 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android