事件高级

注册事件

evenrTarget.addEventlistener(type,listener[useCapture])将指定的监听器注册到eventTarget目标对象,当该对象触发指定的事件时,就会执行事件处理函数。

type事件类型字符串,不带on

listener事件处理函数,事件发生时,会调用该监听函数

useCapture可选参数,是一个布尔值,默认为false

btn.addEventlistener('click',function (){})

eventTarget.attachEvent(eventNameWithOn,callback)

eventNameWithOn事件类型字符串,要带on

callback事件处理函数,当目标触发事件时回调函数被调用。

btn.attachEvent('onclick',function (){})

注册事件兼容性方案

function addEventListener(element,eventNmae,fun) {

if(element,.addEventListener) {

element.addEventListener(eventName,fn);

} else if (element.attachEvent) {

element.attachEvent('on' + eventName,fun);

}else {

element['on' + eventName] = fn;

}

删除事件方式

传统方式

eventTarget.onclick=null;

方法监听方式

eventTarget.removeEventListener(type,listener[useCapture]);

eventTatget.detachEvent(eventNameWithOn,callback);

删除事件兼容性方案

function removeEventListener(element,eventNmae,fun) {

if(element,.removeEventListener) {

element.removeEventListener(eventName,fn);

} else if (element.detachEvent) {

element.detachEvent('on' + eventName,fun);

}else {

element['on' + eventName] = null;

}

DOM事件流

捕获阶段-当前目标阶段-冒泡阶段

事件冒泡-事件开始时由最具体的元素接受,然后逐级向上传播到DOM最顶层节点的过程。

事件捕获-由DOM最顶层节点开始,然后逐级向下传播到具体的元素接受的过程。

事件捕获阶段:document-html-body-div-处于目标阶段

事件冒泡:处于目标阶段-div-body-html-document

addEventListener(type,function (){},false)

第三个参数默认是false,处于冒泡阶段,true是处于捕获阶段。

事件对象e

eventTarget.onclick=function (e) {};

有时间就会有事件对象,系统自动创建的

事件对象兼容性问题e=e || window.event;

e.target和this区别

this是事件绑定的元素,这个函数的调用者

e.tatget是事件触发的元素

事件对象常见属性和方法

e.target  返回触发事件的对象

e.srcElement 返回触发事件的对象,非标准ie678

e.type  返回事件的类型,不带on

e.cancelBubble=true 该属性阻止冒泡,非标准ie678

e.returnValue  该属性阻止默认行为,非标准ie678

e.preventDefault()  该方法阻止默认事件,比如阻止事件跳转

e.stopPropagation() 阻止冒泡

阻止时间冒泡兼容性问题

if(e && e.stopPropagation) {

e.stopPropagation();

} else {

window.event.cancelBubble = true;

}

事件委托可以利用事件冒泡实现

原理-事件监听器设置在父节点上,利用冒泡原理影响设置每一个子节点。

作用-只操作了一次Dom,提高了性能

鼠标事件

禁止鼠标右键菜单

document.addEventListener('contextmenu',function (e){

e.preventDefault();

)

禁止鼠标选中document.addEventListener('selectstart',function (e){

e.preventDefault();

)

鼠标事件对象

e.clienntX 返回鼠标相对于浏览器窗口可视区的X坐标

e.clienntY 返回鼠标相对于浏览器窗口可视区的Y坐标

e.pageX 返回鼠标相对于文档页面的X坐标ie9+

e.pageY 返回鼠标相对于文档页面的Y坐标ie9+

e.screenX 返回鼠标相对于电脑屏幕的X坐标

e.screenY 返回鼠标相对于电脑屏幕的Y坐标

键盘事件

onkeyup  弹起

onkeydown  按下

onkeypress  按下并弹起触发-不能识别shif alt 等功能键

执行顺序-onkeydown-onkeypress-onkeyup

键盘事件对象

keyCode 返回该键ASCII值

onkeyup和onkeydown不区分大小写

onkeypress区分大小写

BOM浏览器对象模型

核心是window

window下面包含document,location,navigation,screen,history

窗口加载事件

window.onload = function (){}或者window.addEventLisyener('load',function (){});

前者只能写一次,多次书写会以最后一个为准。后者可以书写多次。

软加载

document.addEventListener('DOMContentLoaded',function () {})加载dom,不包括样式图片等。

调整窗口大小事件,触发时就会调用这个处理函数

window.onresize = function () {}

window.addEventListener('resize',function (){});

window.innerWidth 当前屏幕宽度

定时器

window.setTimeout(callback,1000)-一次性定时器

window.clearTimeout(timer)

window.setInterval(callback,1000)

window.clearInterval(timer)

倒计时案例

定时器this指向window

Js执行机制-单线程

同步任务-都在主线程上执行,形成一个执行栈。

异步任务-通过回调函数实现,一般来说有以下三种类型:1.普通事件click,resize等  2.资源加载:load,error等  3.定时器:包括setTimeout,steInterval等

异步任务相关回调函数添加到任务队列中。

先执行执行栈中的同步任务,异步任务(回调函数)放入任务队列中。一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环event loop

location对象

window对象给我们提供了一个location属性用于获取或设置窗体的URL,并且可以用于解析URL,因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象。

URL-统一资源定位符,是互联网上标准资源的地址。

protocol://host[:port]/path/[?query]#fragment

http://www.itcast.cn/index.html?name=andy&age=18#link

protocol-通信协议

host-主机(域名)

port-端口号,可选省略时使用方案的默认端口

path-路径

query-参数,以键值对的形式通过&符号分隔开来

fragment-片段,#后面内容常见于链接锚点

location对象的属性

location.href   获取或者设置,整个URL

location.host   返回主机(域名)

location.port   返回端口号,如果未写返回,空字符串

location.pathname   返回路径

location.search   返回参数

location.hash     返回片段,#后面内容常见于链接锚点

重点记:href  ,search

location对象的方法

location.assign()   跟href一样,可以跳转页面(也称为重定向页面)

location.replace()   替换当前页面,因为不记录历史,所以不能后退页面

location.reload()    重新加载页面,相当于刷新按钮或者f5,  如果参数为true强制刷新Ctrl+f5

navigator对象

包含有关浏览器的信息,它有很多属性,我们常见的是userAgent.该属性可以返回由客户机发送服务器的user-agent头部的值。

history对象

与浏览器历史记录进行交互,该对象包含用户(在浏览器窗口中)访问过的URL

history.back()  可以后退功能

history.forward()   前进功能

history.go(参数)   前进后退功能,参数如果是1前进一个页面,如果是-1后退一个页面。

常用于OA办公系统。

你可能感兴趣的:(事件高级)