试图让一些按钮做同样的事情

问题描述 投票:0回答:2

我正在使用Animate来创建动画。我正在让所有按钮完成他们应该做的事情。现在,我坚持以下。我想为多个按钮分配相同的动作,这是因为按钮出现在许多不同的帧上,所以这就是我得到的但是我收到了一个错误。

       var btns = ["btncasco","btncasco1","btncasco2"];

       btns.forEach( btnsIteratee.bind(this)); 

 function btnsIteratee(item){
    this[item].addEventListener("click", function(event){ 
        this.gotoAndStop(0);
    });
}

我希望能够点击任何引用的按钮名称并使它们转到第0帧。任何关于什么是错的想法?

这是我得到的错误:

“未捕获的TypeError:无法读取未定义的属性'addEventListener'”

javascript jquery-animate createjs easeljs
2个回答
0
投票

从你提供的少量代码中可以看出,这可能会导致this的意外行为。然而。下列:

btns.forEach( btnsIteratee.bind(this));

可以受益于绑定一次,因为对于每个forEach循环的实例,对this的引用不会改变。然后传入数组项。如下所示:

var btns = ["btncasco", "btncasco1", "btncasco2"];

function btnsIteratee(item) {
    item.addEventListener("click", function(event) { 
        this.gotoAndStop(0);
    });
}

btnsIteratee = btnsIteratee.bind(this);
btns.forEach(btnsIteratee); 

以上是伪代码,因为您的示例没有提供太多代码


0
投票

谢谢你的帖子。我最终使用这一系列按钮的代码块对此进行了排序。

var btntres = ['btnlumbrera2' , 'btnlumbrera3' ,'btnlumbrera4' ,'btnlumbrera5' ,'btnlumbrera6' ,'btnlumbrera7', 'btnlumbrera8', 'btnlumbrera9', 'btnlumbrera10', 'btnlumbrera11', 'btnlumbrera12', 'btnlumbrera13', 'btnlumbrera14', 'btnlumbrera15', 'btnlumbrera16', 'btnlumbrera17', 'btnlumbrera18']; 

btntres.forEach( btnsIteratee3.bind(this) ); 
function btnsIteratee3(item){


if (this[item] && !this[item].hasEventListener('click')) {
    this[item].addEventListener("click", hyandler.bind(this));
} else {

    console.log('item no existe', item);
}

function hyandler(event){ 
    this.gotoAndStop(4);
}
} 
© www.soinside.com 2019 - 2024. All rights reserved.