使用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 相关文章推荐
JQuery中html()方法使用不当带来的陷阱
Apr 07 Javascript
JQuery Highcharts 动态生成图表的方法
Nov 15 Javascript
jquery选择器之内容过滤选择器详解
Jan 27 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
jquery实现的Accordion折叠面板效果代码
Sep 02 Javascript
JavaScript兼容浏览器FF/IE技巧
Aug 14 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
监控微信小程序中的慢HTTP请求过程详解
Jul 05 Javascript
Vue两种组件类型:递归组件和动态组件的用法
Aug 06 Javascript
详解Vue的mixin策略
Nov 19 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
php读取数据库信息的几种方法
2008/05/24 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php画图实例
2014/11/05 PHP
php实现将Session写入数据库
2015/07/26 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
JS之相等操作符详解
2016/09/13 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
jquery实现垂直手风琴菜单
2020/03/04 jQuery
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python实现EM算法实例代码
2020/10/04 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
住房公积金接收函
2014/01/09 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
教师节大会主持词
2015/07/06 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers