使用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 相关文章推荐
js读写(删除)Cookie实例详解
Apr 17 Javascript
replace()方法查找字符使用示例
Oct 28 Javascript
js实现上传图片预览的方法
Feb 09 Javascript
Angularjs注入拦截器实现Loading效果
Dec 28 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
JS实现动态添加DOM节点和事件的方法示例
Apr 28 Javascript
JavaScript实现简单图片轮播效果
Aug 21 Javascript
在vue中实现简单页面逆传值的方法
Nov 27 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
Layui组件Table绑定行点击事件和获取行数据的方法
Aug 19 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
element-ui 实现响应式导航栏的示例代码
May 08 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 字符串函数收集
2010/03/29 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
装饰活动策划方案
2014/02/11 职场文书
三查三看党性分析材料
2014/02/18 职场文书
优秀员工评优方案
2014/06/13 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
社会工作专业自荐信
2014/09/26 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
感谢信怎么写
2015/01/21 职场文书
逃课检讨书
2015/01/26 职场文书
初中生物教学随笔
2015/08/15 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS