为什么Javascript走马灯自动加速,一点到其他需要运行.JS脚本文件的按钮,走马灯速度就变快。

我的JS代码是这个,请问怎么加全局标记varspeed=10;//数字越大速度越慢vartab=document.getElementById("demo");varta... 我的JS代码是这个,请问怎么加全局标记
var speed = 10; //数字越大速度越慢
var tab = document.getElementById("demo");
var tab1 = document.getElementById("demo1");
var tab2 = document.getElementById("demo2");
tab2.innerHTML = tab1.innerHTML;
function Marquee() {
if (tab2.offsetWidth - tab.scrollLeft <= 0)
tab.scrollLeft -= tab1.offsetWidth
else {
tab.scrollLeft++;
}
}
var MyMar = setInterval(Marquee, speed);
tab.onmouseover = function () { clearInterval(MyMar) };
tab.onmouseout = function () { MyMar = setInterval(Marquee, speed) };
展开
 我来答
来自红塔高高兴兴的米老鼠
2012-07-07 · TA获得超过322个赞
知道小有建树答主
回答量:324
采纳率:0%
帮助的人:211万
展开全部
加个全局标记,已运行状态就return行了。现在估计是你每连一次,就多一个timer出来为它移动。所以越点越快。
另外,要走马灯效果,有很多很好的js库。如msclass.js。自己写的效果不好。
启智思维
2012-07-07 · TA获得超过3416个赞
知道小有建树答主
回答量:1578
采纳率:0%
帮助的人:665万
展开全部
很简单,说明你这些JS代码之间有冲突。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chao919305
2012-07-10 · TA获得超过583个赞
知道小有建树答主
回答量:868
采纳率:0%
帮助的人:607万
展开全部
//setInterval可能会意外的产生多个,所以,将 MyMar 定义成一个数组,用来装载所有的。
var MyMar = [];
MyMar.push(setInterval(Marquee,speed);
//每次鼠标离开的时候都将所有的 延迟句柄 都清除一下,所以onmouseover重写一下:
tab.onmouseover = function(){
for(var i ,len<MyMar.length;i<len;i++){
clearInterval(MyMar[i]);
}
}
//每次添加 动作的时候 都将返回 句柄压进数组,所以onmouseout重写下:
tab.onmouseout = function(){
MyMar.push(setInterval(Marquee, speed));
}
//这样所有的 延迟句柄 都被 MyMar获取,每次都清除之前产生的所有句柄,
/*
这样还可以避免 "切换标签页" 导致的 动画加速的BUG:
比如
标签1是你打开的 网易
标签2是你打开的 新浪
再比如:
标签1中有个动画在循环运行,然后你切换到标签2,半个小时后 你再切换回标签1,标签1中的 动画 就会加速。IE、火狐 都是如此,其他没测试过。将 延迟句柄都放进数组可以避免这个问题。
*/
不知道我说的是不是你遇到的问题
补充下:
如果有变量名冲突 可以 用闭包 将代码包含起来
(function(){
--代码--
}();
这是个自运行函数,函数中的变量不与外部的冲突,没用var 定义的除外。临时运算的变量都这么处理下吧

参考资料: 个人经验

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式