DOM事件探秘

事件流

    定义:面中接收事件的顺序

    事件冒泡:从最具体的元素开始,逐级到最不具体节点

    事件捕获:从最不具体的节点开始,逐级到最具体元素


事件处理程序

    HTML

        在html标签中通过属性写事件

1
<button onclick="alert('hello');">按钮一</button>


    DOM 0级

        把一个函数赋值给一个事件的处理程序属性

1
2
3
4
5
var btn = document.getElementById('btn');         
    btn.onclick = function () {         
    console.log('hello');         
};         
btn.onclick = null//删除事件

    DOM 2级

        用于处理添加和删除事件处理程序

1
2
3
4
5
6
var btn = document.getElementById('btn');         
var showHello = function () {         
        console.log('hello');         
};         
btn.addEventListener('click', showHello,false);         
btn.removeEventListener('click', showHello, false);

        

        兼容处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var eventUtil = {
    addEvent: function (element, type, fn) {    //添加事件
        if (element.addEventListener) {
            element.addEventListener(type, fn, false);
        else if (element.attachEvent) {
            element.attachEvent('on' + type, fn);
        else {
            element['on' + type] = fn;
        }
    },
    removeEvent: function (element, type, fn) { //移除事件
        if (element.removeEventListener) {
            element.removeEventListener(type, fn, false);
        else if (element.detachEvent) {
            element.detachEvent('on' + type, fn);
        else {
            element['on' + type] = null;
        }
    },



事件对象

    是什么

        在触发dom上事件时会产生一个对象

        事件对象event

    DOM中的事件对象

        type属性

        target属性

        stopPropagation() 方法

        preventDefault()方法

    IE中的事件对象

        type属性

    ​    ​srcElement属性

    ​    ​cancelBubble属性

    ​    ​returnValue属性

    兼容类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var eventUtil = {
    addEvent: function (element, type, fn) {    //添加事件
        if (element.addEventListener) {
            element.addEventListener(type, fn, false);
        else if (element.attachEvent) {
            element.attachEvent('on' + type, fn);
        else {
            element['on' + type] = fn;
        }
    },
    removeEvent: function (element, type, fn) { //移除事件
        if (element.removeEventListener) {
            element.removeEventListener(type, fn, false);
        else if (element.detachEvent) {
            element.detachEvent('on' + type, fn);
        else {
            element['on' + type] = null;
        }
    },
    getEvent : function (event) {       //获取事件对象
        return event ? event : window.event;
    },
    getType : function (event) {        //获取事件类型
        return event.type;
    },
    getElement : function (event) {     //获取目标元素
        return event.target || event.srcElement;
    },
    preventDefault : function (event) { //阻止默认行为
        if (event.preventDefault) {
            event.preventDefault();
        else {
            event.returnValue = false;
        }
    },
    stopPropagation : function (event) {//阻止冒泡
        if (event.stopPropagation) {
            event.stopPropagation();
        else {
            event.cancelBubble = true;
        }
    }
};

 

posted @ 2017-02-23 16:09  前望  阅读(109)  评论(0编辑  收藏  举报