【问题标题】:Apply same event to multiple canvases but do different things per canvas - Jquery将相同的事件应用于多个画布,但每个画布做不同的事情 - Jquery
【发布时间】:2013-07-25 19:31:32
【问题描述】:

我基本上有两个这样的画布:

<canvas id="canvas1" class="canvases" ></canvas>
<canvas id="canvas2" class="canvases" ></canvas>

而且因为它们正在运行 Processing.js 并且它们会变得很重,所以我在 jQuery 中对两个按钮都应用了 mouseover 和 mouseout 事件,如下所示:

num_canvases = 2;
canvasArray = [];

for (i = 0, i < num_canvases, i++) {
    canvasArray.push(Processing.getInstanceById('canvas'+i);
}

$('#canvas1').mouseover(function () {
    if (!force_play_all) {
        canvasArray[0].pause_or_resume(false);
    };
});
$('#canvas2').mouseover(function(){
    if (!force_play_all) {
        canvasArray[1].pause_or_resume(false);
    };
});

等等……

但现在我正在扩展到 20 个画布,并且正在寻找一种方法来将相同的鼠标悬停事件应用于每个画布,并在鼠标悬停的任何地方执行 pause_or_resume。我不能每堂课都应用它,否则他们都会开或关。我在想这样的事情,但它仍然不起作用。想法? :

$('.canvases').mouseover(function () {
        for (var i = 0; i <= numVars-1; i++) {
            var name_holder = '#canvas'+(i+1);
                $(name_holder).mouseover(function () {
                    canvas_instance = Processing.getInstanceById('canvas'+i);
                    if (pause_boolean) {
                        console.log(name_holder);
                        console.log(canvas_instance);
                        canvas_instance.pause_or_resume(pause_boolean);
                    };
                });
            };
        });

【问题讨论】:

  • 请问您为什么使用 20 个画布而不是一个分成 20 个部分的画布?
  • 另外,为什么要嵌套mouseover 事件?看起来你可以只使用第一个 mouseover 并使用 this.doSomething 格式
  • 如果你想暂停当前有 mouseover 的那个,它会是这样的:$('.canvases').mouseover(function () { if (this.pause_or_resume()) { console.log(name_holder); console.log(canvas_instance); this.pause_or_resume(pause_boolean); }; 我不确定你的 .pause_or_resume 函数是如何工作的

标签: jquery events canvas mouseover


【解决方案1】:

是的,所以我使用了 20 个画布,因为处理会每秒重绘整个实例 60 次,因此将它们全部放在一个画布中会崩溃。至于嵌套的鼠标悬停,这是因为我不知道在这些情况下使用“this”。 pause 函数采用布尔值;如果为真,则告诉处理停止绘制,如果为假,则告诉它恢复循环。我采纳了您的建议并通过以下方式解决了问题。

这是解决此问题的方法,仅供将来参考。谢谢 Zeaklous!

$("[id^='canvas']").mouseover(function () {
    if (!force_play_all) {
        canvasArray[parseInt(this.id.replace('canvas',''))-1].pause_or_resume(false);
    };
});

【讨论】:

  • 可惜我没有得到代表,哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2020-10-18
  • 2016-01-22
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
相关资源
最近更新 更多