【发布时间】:2016-05-16 13:37:20
【问题描述】:
如下代码sn-p展示核心结构:
EDIT1:
var smthing = 0;
change_name_button.addEventListener('click', function(event){
// some query
// .....
// result from query
data = res.name.coords;
// tried to make the function go to GC
smthing = null;
delete smthing;
smthing = new drawMouseMovement(data);
event.stopPropagation();
}, false);
function drawMouseMovement(data){
// bunch of variables set for drawing function
// .....
// .....
var test = 0;
// draw something to canvas until end "maxLength" is reached
var draw = function() {
if(t < maxLength){
// redraw some stuff to canvas
// .....
}else{
return;
}
}
// function to play pause and replay the drawing on canvas
function playPause(boolPP, boolRP){
if(boolPP){
test = setInterval(draw, 10);
}else{
clearInterval(test);
}
if(boolRP){
// some params being reset
// .....
test = setInterval(draw, 10);
}
}
function play(event){
playPause(true, false);
event.stopPropagation();
}
function pause(event){
playPause(false, false);
event.stopPropagation();
}
function replay(event){
playPause(false, true);
event.stopPropagation();
}
play_button.addEventListener('click', play, false);
pause_button.addEventListener('click', pause, false);
replay_button.addEventListener('click', replay, false);
}
每次点击change_name_buttondrawMouseMovement() 都会使用新参数调用。
如下问题:当再次点击change_name_button之前绘制函数没有到达return时,同一函数有两个实例同时绘制两个不同的东西。只有函数的最后一个调用实例应该是绘图。
我尝试删除指向函数clearInterval() 和removeEventListener 的指针。但我似乎没有让任何这些工作。
我希望我的问题很清楚。 提前致谢。
编辑
问题的简单复制。 some_button 是否单击一次,smt 每 250 毫秒打印一次。是否第二次单击 some_button,每 125 毫秒打印一次 smt 等。如何在下次单击时覆盖 printer() 的第一个实例?
some_button.addEventListener('click', foo, false);
function foo(event) {
printer();
event.stopPropagation();
}
function printer(){
setInterval(function() {
console.log("smt");
}, 250);
}
【问题讨论】:
-
这一行看起来好像您正在创建一个新函数对象而不是结束旧函数对象:
smthing = new drawMouseMovement(data);我有一个更新演示了一个事件监听器,多个event.targets -
当归结为几百毫秒之间的差异时,几乎不可能在很小的时间窗口内进行如此精确的控制。一般来说,JavaScript 总是平均关闭 5 到 10 毫秒。你看过那个演示吗?我使用了一个开关来路由功能,以便您能够触发一个事件。你现在拥有它的方式是: 1 单击 4 eventListener 4 个函数。我的演示:1 click 1 eventlistener 4 functions。如果你的绘图函数有一个延长的持续时间,那么你应该尝试创建一个类或一个函数装饰器。这些是高级模式。继续-->
-
查看有关打印功能的更新。
标签: javascript draw event-bubbling