使用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 相关文章推荐
EASYUI TREEGRID异步加载数据实现方法
Aug 22 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
Jun 12 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
Aug 22 Javascript
使用jquery实现放大镜效果
Sep 02 Javascript
跟我学习javascript的Date对象
Nov 19 Javascript
微信JSAPI支付操作需要注意的细节
Jan 10 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
javascript实现QQ空间相册展示源码
Dec 12 Javascript
element-ui中select组件绑定值改变,触发change事件方法
Aug 24 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
微信小程序 JS动态修改样式的实现方法
Dec 16 Javascript
JavaScript闭包原理与用法学习笔记
May 29 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 之Section与Cookie使用总结
2012/09/14 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
谈谈python中GUI的选择
2018/03/01 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python制作抖音代码舞
2019/04/07 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
《将心比心》教学反思
2014/04/08 职场文书
让生命充满爱观后感
2015/06/08 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
如何利用python创作字符画
2022/06/25 Python