@lizlalala
2016-11-02T16:06:03.000000Z
字数 1800
阅读 1169
未分类
划重点就是:
监听事件方法:
html内联属性
避免使用,因为与html耦合
<button onclick="alert('你点击了这个按钮');">点击这个按钮</button>
dom属性绑定
缺点:多次绑定是覆盖,非添加
element.onclick = function(event){
alert('你点击了这个按钮');
};
事件监听函数
element.addEventListener(<event-name>, <callback>, <use-capture>);
element.removeEventListener("click",funcName,false)
//ie
element.attachEvent(<event-name>, <callback>);//event-name: on+name
use-capture设为false主要是因为ie不支持捕获阶段的事件响应。所以统一在冒泡阶段处理。
事件代理
需要注意的时,事件触发的目标总是最底层的节点。比如你点击一段文字,你以为你的事件目标节点在 div 上,但实际上触发在p,span等子节点上。
事件代理优点:
//原生
element.addEventListener('click', function(event) {
// 判断是否是 a 节点
if ( event.target.tagName == 'A' ) {
// a 的一些交互操作
}
}, false);
//jquery
$(parent).on("click","a",function(e){...})
停止冒泡
这个hin有用呀,特别是用于弹窗的交互上,如果希望点击弹窗以外的部分让弹窗消失,就需要给弹窗设置阻止冒泡
var overlay = document.querySelector('.overlay');
overlay.addEventListener('click', function(event) {
event.stopPropagation();
});
// Remove the overlay when a 'click'
// is heard on the document (<html>) element
document.addEventListener('click', function(event) {
overlay.parentNode.removeChild(overlay);
});
其他注意事项
resize事件,相关的timing function: debounce throttle immediate
总结来说,throttle和debounce都是为了限制在某段时间内大量连续的触发某一事件而进行的优化函数,两者区别在于: