使用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实现数字+字母验证码的简单实例
Feb 10 Javascript
一个实用的图片切换支持点击切换和自动轮播
Sep 09 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
Mar 03 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
Dec 29 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
vue项目打包部署_nginx代理访问方法详解
Sep 20 Javascript
小程序实现页面顶部选项卡效果
Nov 06 Javascript
vue中el-input绑定键盘按键(按键修饰符)
Jul 22 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 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实现的MySQL数据浏览器
2007/03/11 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
十佳班主任事迹材料
2014/01/18 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
工程技术员岗位职责
2014/03/02 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
个人租房协议书样本
2014/10/01 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
出差报告范文
2014/11/06 职场文书
党员年终个人总结
2015/02/14 职场文书
污水处理保证书
2015/05/09 职场文书
小学思品教学反思
2016/02/20 职场文书