var audio = new Audio();
audio.onended = function(e){ console.log('end 1');
}
audio.onended = function(e){ console.log('end 2');
}上面代码很只会输出end 2,要怎么才能做到能输出end 1 和 end 2?我自己想了一种方法bind(handler, cb){
!m && (m = []);
!m[handler] && (m[handler] = []);
m[handler].push(cb);
}
bind('ended', function(e){ console.log('1');
});
bind('ended', function(e){ console.log('2');
});var audio = new Audio();
audio.onended = (e) => { for (var k in m['ended']){
m['ended'][k](e);
}
}大概就是这样,用数组保存,然后audio方法循环调用但是我就感觉实现的方式不够优希望各位不吝赐教
1 回答

qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
你的做法是正确的,但是如果把 bind
封装起来,再把下面的 for
封装成一个 trigger
函数就更好了。
不过话说回来,Audio 是一个 HTMLDom 对象,本身应该提供了 addEventListener()
方法,可以用这个方法添加任意个处理函数。
如果你使用 jQuery,通过 jQuery 封装之后调用 on()
也可以绑定多个处理函数,比如
$(audio) .on("ended", function() { console.log(1); }) .on("ended", function() { console.log(2); });
添加回答
举报
0/150
提交
取消