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.可以给页面上暂时不存在的元素绑定事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
明日问题的输入事件与输出事件为: | Input Events | Node Output Event description Node . e0: start program event 1 e7: Welcome message 2 e1: center a valid month 6e8: print today's date 4 e2: enter an invalid month 67| e9: print tomorrow's date 6 e3: enter a valid day 69 e10: "month OK" 39 e4: enter an invalid day 69 e11: "month out of range" 41 e5: enter a valid year 71 e12: "day OK" 4 e6: enter an invalid year 71 e13: "day out of range" 4S e14: "year OK" 54 e15: "year out of range" 5( e16: "Date OK" 6C e17: "please enter a valid date" 62 e18: "enter a month" 6( e19: "enter a day" 68 e20: "enter a year" 70 c21: "Day is month, day, year" 8S 在下表中,ASF-6对应的输入事件为: 输出事件 ASF-7对应的输入事件为: 输出事件 为:_ ASF-8对应的输入事件为:_, 输出事件 为:_ ASF-9对应的输入事件为:_,输 出事件 为:_ Atomic System Function Inputs Outputs L ASF-1 start program e0 e7 | ASF-2 enter a date with an invalid month, valid day and valid year e2, e3,e5 e11,e12,e14,e17 | ASF-3 enter a date with an invalid day, valid month and validyear| e1, c4,e5 e10,e13,e14,e17 | ASE-4 enter a date wih an ivalid year, valid day and valid monh| el,e3, c6 e10,e12, el5,e17| ASF-5 enter a date with valid month, day, and year e1,e3,e5 . e10, e12, e14, e16, c21 | ASIF-6 enter a date with valid month, day and year invalid ASF-7 enter a date with valid day, month and year invalid ASF-8 enter a date with valid year, day and month invalid ASF-9 enter a date with invalid month, day, year
06-01

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿駷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值