var focus = true;
function z() {
this.t = 0;
this.p = function (t) {
if (focus == true) {
this.t = t;
alert(this.t);
}
}
}
var zp = new z();
setTimeout('zp.p(0)', 100);
window.setInterval('zp.p(1)', 2000);
var ftimer = setTimeout('focus=false', 2000);
document.addEventListener('mousemove', function (e) {
clearTimeout(ftimer);
focus = true;
ftimer = setTimeout('focus=false', 2000);
}, false);
我有这个代码。但由于某种原因,即使连续鼠标移动,它也只会发出两次警报。我一直在努力研究萤火虫,当我移动鼠标时,焦点是正确的。我一直想弄清楚发生了什么......即使我这样做了:
function z() {
this.t = 0;
this.p = function (t) {
if (focus == true) {
this.t = t;
}
alert(this.t);
}
}
它仍然只发出两次警报。
我也试过使用循环setTimeout函数,但这也不起作用。这让我发疯了。
答案 0 :(得分:0)
我发现它只与firefox有关,并且firefox在一行代码中被阻塞,这就是为什么它不能运行。所以我解决了这个问题,现在一切都很好。
答案 1 :(得分:0)
很好,你找到了你的错误。
我会使用更多的函数作为第一类对象和更少eval
逻辑来编写代码:
var focus = true;
function z() {
var that = this; // we won't always have the correct value of "this"
this.focus = true;
this.t = 0;
this.p = function (t) {
if (that.focus == true) {
that.t = t;
alert(t);
}
}
this.fade = ( function(obj){ return function(){ obj.focus = false; } } )(this); // Using self-invokation
}
var zp = new z();
setTimeout(zp.p, 100, 0);
window.setInterval(zp.p, 2000, 1);
var ftimer = setTimeout(zp.fade, 2000);
document.addEventListener('mousemove', function (e) {
clearTimeout(ftimer);
zp.focus = true;
ftimer = setTimeout(zp.fade, 2000);
}, false);
我在第10行使用self-invoking function:( function(obj){ return function(){...} })(this);
和set this
to a different variable。