使用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 textarea的长度进行验证
May 06 Javascript
Extjs入门之动态加载树代码
Apr 09 Javascript
js 如何实现对数据库的增删改查
Nov 23 Javascript
Node.js返回JSONP详解
May 18 Javascript
jquery实现无刷新验证码的简单实例
May 19 Javascript
js调用屏幕宽度的简单方法
Nov 14 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
Jul 18 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 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的mysqli_set_charset()函数讲解
2019/01/23 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
Python中属性和描述符的正确使用
2016/08/23 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python分治法定义与应用实例详解
2017/07/28 Python
Django权限机制实现代码详解
2018/02/05 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
啤酒销售实习自我鉴定
2013/09/24 职场文书
医药大学生求职简历的自我评价
2013/10/17 职场文书
汽车专业毕业生推荐信
2013/11/12 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
《花木兰》教学反思
2014/04/09 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
出售房屋协议书范本
2014/10/06 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
雷锋观后感
2015/06/10 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python
python前后端自定义分页器
2022/04/13 Python