day14(事件2)

事件

一、浏览器的默认行为

浏览器的默认行为,如何阻止?
    
就是浏览器自己触发的事件。比如:a链接的跳转,form提交时的跳转,鼠标右键菜单。

oncontextmenu    鼠标右键事件

当触发鼠标的右键事件时,会弹出右键菜单,这就是默认事件情况之一


如何阻止默认事件?
//阻止a的默认跳转行为
var a = document.querySelector("a");
a.onclick = function(event){
    //兼容写法
    var e = event || window.event;
    //只支持高版本的浏览器
    //e.preventDefault();

    //IE9以下浏览器
    //e.returnValue = false;

    //企业开发推荐使用
    return false;
}

案例:自定义右键菜单

二、鼠标拖拽效果

拖拽分解:按下鼠标 ----> 移动鼠标 ----> 松开鼠标

1.给目标元素添加onmousedown事件,拖拽的前提是在目标元素按下鼠标左键

2.当onmousedown发生以后,此刻给document添加onmousemove事件,意味着此刻鼠标在网页的移动都将改变目标元素的位置

3.在onmousemove事件中,设定目标元素的left和top,

4.当onmousedown发生以后,此刻给document添加onmouseup事件,意味着此刻鼠标在网页的任意位置松开鼠标,都会放弃拖拽的效果

在onmouseup事件中,取消document的onmousemove事件即可。

三、事件监听

事件触发阶段主要由于事件流:DOM0级事件处理阶段和DOM2级事件处理;

DOM0级事件处理,是一种赋值方式,是被所有浏览器所支持的,简单易懂容易操作;
元素.onclick = function(){}

DOM2级事件处理是所有DOM节点中的方法,可以重复绑定,但是浏览器兼容存在问题;

非IE下:(这里的事件名不带on),第三个参数表示是在捕获阶段还是冒泡阶段。可以重复绑定事件,执行顺序按照绑定顺序来执行。

oDiv.addEventListener('click',fn,false);
oDiv.removeEventListener('click',fn ,false);

IE下:

只有冒泡阶段,所以没有第三个参数;(这里的事件名需要加on)
oDiv.attachEvent();
oDiv.detachEvent(); 删除

冒泡:从下往上(从里往外)
捕获:从上往下(从外往内)

//元素不要加引号   事件需要加引号
function addevent(ele, type, callback){
    if(ele.addEventListener){
        ele.addEventListener(type, callback, false);
    }else if(ele.attachEvent){
        //兼容IE
        ele.attachEvent('on' + type, callback);  只支持冒泡
    }
}

四、事件委托机制

事件委托(委派)指将事件统一绑定给元素的共同祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素从而通过祖先元素的响应函数来处理事件。

事件委托是利用了冒泡,通过委托可以减少事件绑定的次数,提高程序的性能。

target - event中的target表示触发事件的对象

oul.onclick = function(eve){
var e = eve || window.event;
var target = e.target || e.srcElement;
//如果触发事件的对象是我们期望的元素,则执行,否则不执行
if(target.nodeName == "LI"){
	console.log(target.innerHTML);
	}
}

优势:
1.节省性能

2.可以给页面上暂时不存在的元素绑定事件
上一篇:C++基础Day14


下一篇:监听器应用【统计网站人数、自定义session扫描器、踢人小案例】