为什么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) }; 展开
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) }; 展开
3个回答
展开全部
很简单,说明你这些JS代码之间有冲突。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//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 定义的除外。临时运算的变量都这么处理下吧
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 定义的除外。临时运算的变量都这么处理下吧
参考资料: 个人经验
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询