如何在Kinetic JS layer.children上检测onclick?

时间:2013-12-27 18:56:09

标签: javascript kineticjs

所以我必须制作一个网页,其中有一件家具,你可以给它的部分上色。 首先,你必须选择一种颜色,然后点击一个架子或盒子。

到目前为止我已经做到了这一点:

http://tone-me.com/gridalea/tone.html

我遇到的唯一问题是当我在盒子,架子上添加颜色时。对于第一个盒子,它可以正常工作,但是当我再次尝试时,它不会触发onclick事件。没有任何事情发生。我的概念是我删除整个模型,然后用选定的颜色重新绘制它。但是当我尝试修改重新绘制的模型时,什么都不会发生。使用其他解决方案进行了多次测试(例如,我只重绘了被点击的部分)。

这是我的脚本: http://tone-me.com/gridalea/js/tone.js

这部分重新绘制整个模型:

function model1(){
        layer.destroyChildren();
        layer.clearCache();
        racs1();           //adds outlines to layer
        dobozok1();        //adds boxes, shelves, etc. to layer
        stage.add(layer);
    };

这是点击检测:

layer.children.on('click', function() {
    var name=this.attrs.name;
    switch (name){
        case 'topl':
            bc[2]=[res[0],res[1],res[2],1];
        break;
        case 'topb':
            bc[3]=[res[0],res[1],res[2],1];
        break;
        case 'midr':
            bc[4]=[res[0],res[1],res[2],1];
        break;
        case 'mids':
            bc[5]=[res[0],res[1],res[2],1];
        break;
        case 'bottoms':
            bc[6]=[res[0],res[1],res[2],1];
        break;
        case 'bottomb':
            bc[7]=[res[0],res[1],res[2],1];
        break;
        default:
    };
    model1();
});

当它触发时,我会更改包含框颜色的bc数组,并且数组res具有新值。

然后我运行上面显示的model1函数,它会破坏任务,然后用修改后的颜色重绘它们。

我用Firebug测试了它,每个变量和对象都设置了正确的值,(数组res是个例外,你必须先点击一个颜色,让它得到它的值,我会解决的以后) 我不知道问题是什么。为什么它不会检测到多次点击。重绘后layer有子多边形,多边形的名称属性正确,但它不再检测到它们。

1 个答案:

答案 0 :(得分:0)

我遇到了与this project类似的问题,并最终通过重新创建整个Stage及其所有内容来解决这个问题。