如果 click 事件被多次触发,大概是因为事件监听器被重复绑定到同一个元素上。要解决这个问题,需要确保 click 事件监听器只被添加一次,或者在每次重新添加前先移除之前的监听器。
(如果单纯是因为人为的手抖,频繁操作,可以用【节流】和【防抖】来避免)
解法一:确保只添加一次事件监听器
if (!this.clickEventAdded) {
this._viewer.on('click', (e) => {
// ... click event handler logic ...
});
this.clickEventAdded = true;
}
解法二: 在添加新的监听器之前移除已有的监听器
// 移除所有的click事件监听器
this._viewer.off('click');
// 添加新的click事件监听器
this._viewer.on('click', (e) => {
// ... click event handler logic ...
});
解法三:使用命名函数作为事件处理器
和解法二相同,只是把函数提取出来做一层抽象
// 定义事件处理函数
const handleClick = (e) => {
// ... click event handler logic ...
};
// 移除现有的处理函数以避免重复
this._viewer.off('click', handleClick);
// 绑定事件处理函数
this._viewer.on('click', handleClick);