使用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 相关文章推荐
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
Apr 29 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
微信小程序之选项卡的实现方法
Sep 29 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
浅谈mvvm-simple双向绑定简单实现
Apr 18 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
jquery树形插件zTree高级使用详解
Aug 16 jQuery
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
Feb 06 Javascript
小程序实现上下切换位置
Nov 16 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
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
PHP中使用curl入门教程
2015/07/02 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
js资料toString 方法
2007/03/13 Javascript
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
jquery validation验证表单插件
2017/01/07 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
python连接mysql实例分享
2016/10/09 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
大学生社会实践评语
2014/04/25 职场文书
会计学习心得体会
2014/09/09 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
教师工作态度自我评价
2015/03/05 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
python热力图实现的完整实例
2022/06/25 Python