如何删除EventListener?

时间:2014-05-29 01:18:30

标签: famo.us

在文档中给出removeListener - /famous/core/Surface.js

removeListener (type, fn) 
Unbind an event by type and handler. This undoes the work of 'on'

所以我想要完成的是..有四个表面,当我点击一个时,它会从其他三个表单中删除点击操作,因此用户将无法点击它们。

removeEventListener('click', function() {
   console.log("removed"); 
});

我在做什么? 感谢。

1 个答案:

答案 0 :(得分:2)

要获取在Famo.us事件中单击的表面,您可以使用e.origin。然后,您可以使用此曲面与所有曲面进行比较,并相应地取消绑定事件。要正确使用removeListener,您需要将事件类型以及要删除的函数传递给它。

这是一个完整的例子或你描述的内容。如果单击其中一个方块,它将成为可进一步单击的唯一方格。

希望这有帮助!

var Engine          = require("famous/core/Engine");
var Surface         = require("famous/core/Surface");
var Transform       = require("famous/core/Transform");
var StateModifer    = require("famous/modifiers/StateModifier");

var context = Engine.createContext();

var surfaces = [];

var handleClick = function(e){

    var count = parseInt(e.origin.getContent()) + 1 ;
    e.origin.setContent(count);

    for (var i = 0; i < surfaces.length; i++) {
        var surface = surfaces[i];
        if (surface != e.origin) {
            surface.removeListener('click',handleClick);
        };
    };

}

var colors = ["red","green","blue","purple"];

for (var i = 0; i < 4; i++) {
    var surface = new Surface({
        size:[100,100],
        content: "0",
        properties: {
            backgroundColor: colors[i],
            color: 'white',
            lineHeight:'100px',
            textAlign:'center'
        }
    })

    surface.state = new StateModifer({
        transform:Transform.translate(0,i*100,0)
    })


    surface.on("click",handleClick);

    surfaces.push(surface);

    context.add(surface.state).add(surface);

};