事件处理程序
html事件处理程序(直接在html中书写script)
<!-- //#### 事件处理程序 //html时间程序 可以直接在HTML文件中写,而且还可以引用其他地方的方法和函数 --><input type="text" name="account"><button value="echo Username" onclick="alert(account.value)">查看内容</button><!-- /*HTML事件程序可以直接调用HTML中的属性如这里的username.value就是输入框username的值 -->
可以直接调用html中的属性不需要捕捉节点
HTML事件处理程序的缺点:需要同时修改HTML文件和JAVAscript文件
//
/
/
//
DOM0级事件处理程序
//**DOm0级事件处理程序(普通方法)**var btns = document.querySelectorAll('button');btns[2].onclick = function() {alert(this.name); //可以访问事件对象btns[2]的属性}//删除事件btns[2].onclick = null; //点击按钮好无反应了
DOM2级事件处理程序(监听器)
//DOM2级处理时程序(监听器)btns[3].addEventListener("click", function() {alert(this.id); //!!!!!注意 : click后面前面都不能有空格}, false);btns[3].addEventListener("click", function() {alert(this.name);}, false)//DOM2级处理程序的好处是可以设置事件流,true为捕获事件流,false为冒泡事件流,还可以添加多个事件给同一个节点,//注意第一个接受的参数click没有on//多个处理程序按添加的顺序触发
删除事件:
//删除事件//dom2级事件处理程序只能用removeEvenListner()删除// removeEventListener("事件",函数名,true or false);删除的三个参数必须跟addeventlistner完全一样 ,其中函数不能用匿名函数funcion(),必须要用函数表达式funtion fn();function fn() {alert("删除监听程序");}btns[4].addEventListener("click", fn, false);btns[4].removeEventListener("click", fn, false);
事件对象
event.type的应用
//事件对象//event对象,每个事件都有一个event对象,event.type就是事件的类型//通过event.type属性可以使一个函数控制多个事件var div = document.querySelector('div');var handler = function(event) {switch (event.type) {case "click":alert('clicked');break;case "mouseover":event.target.style.backgroundColor = "red";break;case "mouseout":event.target.style.backgroundColor = " white";break;}}div.onclick = handler;div.onmouseover = handler;div.onmouseout = handler;
阻止事件的发生(阻止链接生效 阻止事件 阻止事件冒泡捕捉)
// event.preventDefault(); //阻止链接或者什么事件的发生var link = document.querySelector('a');console.log(link);link.onclick = function(event) {event.preventDefault();}//阻止点击div显示clickeddiv.onclick = function(event) {event.preventDefault();}//阻止事件流向上或向下传播// event.stopImmediatePropagation();不会冒泡事件和捕获时间了
//
/
/
/
事件类型
UI事件 不一定与用户操作相关的事件
//页面加载window.onload = function() {alert('loaded');}//图片加载var Image = document.querySelector('#img');Image.addEventListener("load", function(event) {alert('picture has loaded');});//onunload事件window.onunload = function() {alert('页面已销毁');};//resize事件 当调整页面宽度和高度时触发window.addEventListener("resize", function() {alert('resized');});scroll事件 滚动页面时触发window.onscroll = function() {console.log(document.documentElement.scrollTop);//反应垂直方向的滚动位置}
焦点事件(常用于文本框);
不需用药flag了
var focu = document.querySelector('#focus');focu.onfocus = function(event) {focu.value = " ";};focu.onblur = function() {focu.value = "请输入用户名";}
鼠标与滚动事件
click点击时触发 当 mousedown 或 mouseup被取消是就不会触发click
mousedown 按下任意鼠标时触发
mouseup 用户释放鼠标按钮时触发
dblclick事件双击鼠标时触发
mouseenter 鼠标移入某个元素时触发
mouseout 鼠标移出某个元素时触发
mouseover 当鼠标(首次)从外部移到元素内部时触发
onmouseover 当鼠标指针在元素内部移动时(重复的)触发
**//event.offsetX/ offsetY 鼠标到目标元素边界的距离//offsetLeft offsetRight 子元素相对于父元素的距离//offsetWidth 元素的宽度属性 offsetHeight 元素的高度属性//客户区坐标位置 clientX,clientY相对于浏览器的坐标,不包括滚动的距离//页面坐标位置 pageX , pageY相对于整个浏览器页面的坐标//屏幕坐标位置 screenX,screenY相对于整个屏幕而言的坐标 浏览器缩小后坐标也不会变**
修改键得到 是否在执行某个事件时同时按下了某些键
//shiftkey,ctrlkey,altkey,metakey
相关元素 mouseover 和 mouseout 都有相关元素 通过 event.relatedTarget属性可以查看相关属性(某些浏览器不可用)
//chore可以 在 mouseover中用 event.fromElementmouseout中用event.toElementvar relate = document.querySelector('.relate');relate.onmouseover = function(event) {console.log(event.fromElement);}
event.button属性
event.button = 0左键
event.button = 1中间滚轮键
event.button =2右键
// 鼠标按钮 event.button//mousedown 和 mouseup事件 对象中有一个button属性//在高级版本浏览器中 button==0表示左键 button ==1 表示滚轮键 button == 2表示右键//低级版本分为了七类var mousebutton = document.querySelector('.mousebutton');mousebutton.onmousedown = function() {console.log(event.button);}mousebutton.onmouseup = function() {console.log(event.button); //表示放下的鼠标键是哪个}
event.detail 反映的是点击的次数
鼠标滚轮事件
document.onmousewheel = function() {console.log('鼠标滚动了' + event.wheelDelta + event.detail); //event.wheelDelta可以返回出移动的距离每次150}
/
/
/
/
键盘与文本事件
键盘与文本事件 常用于输入文本框时
//触发顺序:keydown(按下任意按键都会触发)>keypress(按下字符键如 abc等才会触发)>keyup(松开键时触发)
var textandkeyboard = document.querySelector('#textandkeyboard');//每个keyup都会触发keyCode属性 event.keyCode返回输入键的阿斯卡码(低版本浏览器) 注意keycode只返回小写字母不分大小写 textandkeyboard.addEventListener('keyup', function() {console.log(event.keyCode);});//一些高版本浏览器中当触发了onkeypress时按下的 键就保存在charCode中 高版本浏览器中charCode属性保存了ASCII码textandkeyboard.addEventListener('keypress', function() {console.log(event.charCode);}); //给同一个节点用两个事件时先触发后一个事件
textInput事件 只能用DOM3事件处理程序(适用于高版本浏览器)
//textinput 和 keypress的区别:1.只有在可编辑区域可以写入得地方才能触发textInput,而keypress可以再任何节点触发2.textInput只有在输入有实际符号的值时才会触发,
//而keypress只要是对文本有影响的值就会触发例如 delete键
var text = document.querySelector('#textInput');text.addEventListener('textInput', function(event) {alert(event.data); //event.data中储存了输入的字符不是阿斯卡码console.log(event.inputMethod); //只有IE浏览器支持});//textinput中的属性 inputMethod表示文本输入到文本框中的方式 当inputmethod值为 0:表示浏览器不知道怎么入数的 1:表示用键盘输入的 2:表示文本是粘贴进来的 3:表示文本数拖进来的等等
变动事件
删除节点
// 在使用removeChild() 或replaceChild() 从DOM中删除节点时 首先会触发DOMNoderRemoved() 事件这个事件会冒泡在页面上任意节点都会收到
// 1. 删除节点var variation = document.querySelector('#variation');var deletes = document.querySelector('#delete');var body = document.querySelector('body');//必须要设置删除节点的操作而不是直接删除deletes.onclick = function() {body.removeChild(variation);}variation.addEventListener('DOMNodeRemoved', function() {alert('触发了DOMNodeRemoved事件');});// 第二个触发的事件是DOMNodeRemovedFromDocument 目标是被删除的节点和每一个子节点variation.addEventListener('DOMNodeRemovedFromDocument', function() {alert('触发了DOMNodeRemovedFromDocument');});//最后触发的是在document.body触发的DOMSubtreeModified事件
添加节点
//在使用appendChild replaceChild insertBefore()向DOM中插入节点时,首先会触发DOMNodeinserted事件 目标是被插入(被新节点插入)的节点 事件冒泡
//#### 插入节点var insert = document.querySelector("#insert");var lis = document.createElement('li');insert.addEventListener('click', function() {variation.appendChild(lis);});variation.addEventListener('DOMNodeInserted', //注意大小写啊!!function() {alert('触发了DOMNodeinserted事件');});//第二 会触发DOMNodeInsertedIntoDocument事件 目标是被插入的节点(新插入的那个节点)事件不会冒泡lis.addEventListener('DOMNodeInsertedIntoDocument', //注意大小写啊!!function() {alert('触发了DOMNodeInsertedIntoDocument事件');});//最后是DOMSubtreeModified 事件 触发于新插入节点的父节点variation.addEventListener('DOMSubtreeModified',function() {alert('触发了DOMSubtreeModified事件');});
html5事件
contextmenu事件:右键点击出菜单栏事件
//contextmenu事件 设置自定义上下文菜单 contextmenu事件处理程序只能用监听器模式var box = document.querySelector('.box');var menu = document.querySelector('.menu');box.addEventListener('contextmenu', function() {event.preventDefault();//使系统自带的菜单栏不能出现menu.style.left = event.clientX + "px";menu.style.top = event.clientY + "px";menu.style.visibility = 'visible';});window.onclick = function() {menu.style.visibility = 'hidden'; }
beforeunload事件:在退出页面时触发
//beforeunload事件window.addEventListener('beforeunload', function() {event.returnValue = '请确认是否退出该页面';return event.returnValue; //必须将提示的event.returnValue返回});
DOMContentLoaded事件 在 load前面触发
//DOMContentLoaded事件 该事件会在load前 触发,不理会图像JavaScript文件 CSS文件是否下载完毕 可以使用户更早的实现交互 该事件冒泡实际对象是documentdocument.addEventListener('DOMContentLoaded', function() {alert('DOM树已经加载完毕 但图像和javascript文件还没加载');});
模拟事件
模拟鼠标点击事件
createEllement();
var box = document.querySelector('.box');box.onclick = function() {box.style.backgroundColor = "red"; //设置属性颜色的方法}//模拟鼠标点击事件var event = document.createEvent("MouseEvent");event.initMouseEvent("click", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); //设置鼠标点击类型前面四个参数是最基本的参数box.dispatchEvent(event); //最后必须通过dispatchEvent(event)触发//模拟键盘事件
.11.18第十三章 事件(事件处理程序;事件对象;事件类型:UI事件;焦点事件;鼠标与键盘事件 变动事件 模拟事件)