- js事件
- 一、什么是事件,事件的起因
- btn.onclick = function(){
- }
- 二、事件流
- 1》 事件冒泡:从内到外
- 2》 事件捕获:从外到内
- 三、鼠标类事件
- 1》 onclick ===è单击事件
- 2》ondbclick ==è双击事件
- 3》 oncontextmenu ===è右击事件
- 4》 onmouseover === >鼠标移入、穿过(一次)
- 5》 onmouseout=è鼠标移出
- 6》 onmousemove == >鼠标移入(一直会执行的代码)
- 7》 onmousedown === >鼠标按下
- 8》 onmouseup =è 鼠标释放
- 四、键盘类事件
- 1》 onkeydown ====è键盘按下
- 2》 onkeyup === 》键盘释放(松开)
- ********************属性:keyCode:得到键盘中的值
- 五、其他类事件
- 1. 》onload ====è加载(dom 加载事件)
- 2. 》onfocus === >得到焦点
- 3. 》onblue ===è失去焦点
- 4. 》onresize ==== >浏览器或者框架尺寸发生变化时触发的事件
- 5. 》onscroll ==è滚动条发送变化时触发
- 6. 》onchange ===== >发生变化时触发
- 六、事件处理程序===》添加
- 1》 html事件处理程序 :
- 语法:把事件写到节点上
- 缺点:HTML和js耦合
- 2》 dom0级事件处理程序
- 语法:box.onclick = function(){}
- 缺点:同样一个事件后面的会覆盖前面的
- 3》 dom2级事件处理程序
- 语法:box.addEventListener(事件名称,函数,false|true)
- 参数1:不需要加on =èclick
- 参数3:false 代表冒泡,true 代表捕获
- 缺点:在ie8或者8以下中是不兼容的不支持
- 4》 ie事件处理程序
- 语法:box.attachEvent(事件名称,函数);
- 参数1:需要加on
- 5》 跨浏览器事件处理程序(兼容)
- dom0级
- dom2级
- ie事件处理程序
- //兼容事件
- function setEvent(dom,evt,fn){
- if(dom.addEventListener){
- dom.addEventListener(evt,fn,false);//dom 2级事件处理程序
- }else if(dom.attachEvent){
- dom.attachEvent("on"+evt,fn);//ie 事件处理程序
- }else{ //浏览器比较老以上都不支持
- dom["on"+evt ]= fn //dom 0级事件处理程序
- }
- }
- //测试
- setEvent(box,"click",function(){alert(1)})
- setEvent(box,"click",function(){alert(2)})
- 七、删除事件处理程序
- dom 0级删除 ===》
- 语法:DOM对象.事件名称= null;
- dom2级删除 ===》
- 语法:DOM对象.removeEventListener(事件名称,函数,false|true)
- 参数1:不需要加on
- 参数2:函数用同一个函数
- ie删除
- 语法:DOM对象.detachEvent(事件名称,函数);
- 参数1:需要加on
- 参数2:函数用同一个函数
- 兼容处理
- function removeEvent(dom,evt,fn){
- if(dom.removeEventListener){
- dom.removeEventListener(evt,fn,false);
- }else if(box.detachEvent){
- dom.detachEvent("on"+evt,fn)
- }else{
- dom["on"+evt] = null;
- }
- }
- 八、事件对象
- 非ie事件对象 === 》参数
- ie中事件对象======》 window.event
- 跨浏览器事件对象,处理兼容 ====》window.event || e;
- var evt = window.event || e ;
- 九、事件对象的属性
- a) target (非ie)==è目标(返回对应的dom 节点)
- b) srcElement(ie中)
- 处理兼容 :事件对象.target || 事件对象.srcElement;
- //兼容处理
- var tar = e.target || e.srcElement;
- c) clientX ==è返回当前鼠标位置距离流量器左侧距离
- d) clientY ==è返回当前鼠标位置距离流量器顶部距离
- ****************注意:返回结果没有单位的
- 十、事件委托
- 原理:冒泡的原理
- 优点:
- 1、性能较好(提高)
- 2、即使后添加的也有效
- 十一、事件的阻止冒泡
- 语法:
- 事件对象.属性名称
- 非IE: e.stopPropagation() ;//非IE 阻止冒泡 谷歌、火狐都可以
- IE: e.cancelBubble =true; // IE 阻止冒泡 谷歌可以火狐不行
- 兼容处理:
- if(e.stopPropagation){
- e.stopPropagation() ;
- }else{
- e.cancelBubble =true;
- }
- 十二、事件的阻止默认行为
- 语法:
- 事件对象.属性名称
- 非ie : e.preventDefault();
- ie : e.returnValue = false ;
- 兼容处理:
- //兼容处理
- if(e.preventDefault) {
- e.preventDefault(); //非IE
- }else {
- e.returnValue = false ; //ie
- }
- //事件流————--冒泡:从内到外 /捕获:从外到内
- /*var dv1 = document.getElementById("dv1"),
- dv2 = document.getElementById("dv2");
- dv1.onclick = function(){
- alert(1)
- }
- dv2.onclick = function(){
- alert(2)
- }*/
- //鼠标事件
- //var box = document.getElementById("box");
- /*box.onclick = function(){
- alert(1)
- }*/
- /*box.ondblclick = function(){
- alert("双击")
- }*/
- /*box.oncontextmenu = function(){
- alert("右击")
- }
- */
- //键盘事件
- /*document.onkeydown = function(){
- alert(1)
- }
- document.onkeyup = function(){
- alert("释放")
- }*/
- /*document.onkeydown = function(e){
- alert(e.keyCode)
- }*/
- //事件处理程序
- //html事件处理程序 :
- /*function fn(num1,num2){
- return num1+num2;
- }
- box.onclick = function(){
- alert("dom 0级事件处理1")
- }
- box.onclick = function(){
- alert("dom 0级事件处理2")
- }//缺点 下边覆盖上面
- window.onload = function(){
- alert(1)
- }
- window.onload = function(){
- alert(2)
- }*/
- //dom0级事件处理程序 缺点 下边覆盖上面
- //dom 2级事件处理程序
- //var box = document.getElementById("box");
- //语法:box.addEventListener(事件名称,函数,false|true)
- //box.addEventListener("click",function(){alert(1)},false) ;//false ===冒泡
- //box.addEventListener("click",function(){alert(2)},false) ;//false ===冒泡
- //ie中事件处理程序
- //语法:box.attachEvent(事件名称,函数);
- /*box.attachEvent("onclick",function(){
- alert(1)
- })
- box.attachEvent("onclick",function(){
- alert(2)
- })*/
- //兼容事件
- /*function setEvent(dom,evt,fn){
- if(dom.addEventListener){
- dom.addEventListener(evt,fn,false);//dom 2级事件处理程序
- }else if(dom.attachEvent){
- dom.attachEvent("on"+evt,fn);//ie 事件处理程序
- }else{ //浏览器比较老以上都不支持
- dom["on"+evt ]= fn //dom 0级事件处理程序
- }
- }
- //测试
- setEvent(box,"click",function(){alert(1)})
- setEvent(box,"click",function(){alert(2)})*/
- //删除事件处理程序
- var box = document.getElementById("box");
- /*box.onclick = function(){
- alert(2);
- }
- box.onclick = null;//dom 0级删除事件
- */
- function fn (){
- alert(1)
- }
- /*box.addEventListener("click",fn (),
- false
- );
- //语法:box.removeEventListener(事件名称,函数,false|true)
- box.removeEventListener("click",fn (), //添加删除用同一个函数
- false
- );*/
- //ie删除
- //box.attachEvent("onclick",fn);
- //box.detachEvent("onclick",fn)
- //兼容删除处理
- //可以删除dom 0级 dom 2级 ie
- /*function removeEvent(dom,evt,fn){
- if(dom.removeEventListener){
- dom.removeEventListener(evt,fn,false);
- }else if(box.detachEvent){
- dom.detachEvent("on"+evt,fn)
- }else{
- dom["on"+evt] = null;
- }
- }*/
- //事件对象
- /*var box = document.getElementById("box");
- box.onclick = function(e){ //mouseEvent
- // alert(e) ;//非ie事件对象 === 》参数
- // alert(arguments.length) ;//只有一个实参 就是事件对象
- // alert(window.event);//ie中
- //1>非ie认识的是参数e ie认识的是window.event
- var evt = window.event || e ;
- alert(evt);
- }
- function fn(){
- alert(arguments[0])
- }
- fn(5,6)
- */
- // 事件对象的属性
- /*var box = document.getElementById("box");
- box.onclick = function(e){
- var e = window.event || e;
- // alert(e.target);//非ie 中对象属性
- // alert(e.srcElement)//ie中对象属性
- //兼容处理
- var tar = e.target || e.srcElement;
- alert(tar)
- }
- */
- // 事件委托
- var btn = document.getElementById("btn"),
- uls = document.getElementById("uls"),
- lis = document.getElementsByTagName("li");
- /*for(var i = 0 ; i < lis.length ; i++){
- lis[i].onclick = function(){
- this.style.background = "red";
- }
- }
- */
- /*
- btn.onclick = function(){
- var oli = document.createElement("li");
- uls.appendChild(oli);
- }
- */
- /**
- * 本身是li 加事件 现在然uls 加事件
- */
- /*uls.onclick = function(e){
- var e = window.event || e; //兼容
- var tar = e.target || e.srcElement ; // 对象属性 ===》目标
- if(tar.nodeName == "LI"){
- tar.style.background = "red";
- }
- }
- btn.onclick = function(){
- var oli = document.createElement("li");
- uls.appendChild(oli);
- }
- * */
- //clientX clientY
- /*document.onclick = function(e){
- var e = window.event || e ;
- alert(e.clientX);//当前鼠标距离浏览器位置
- }*/
- //事件的阻止冒泡
- /*var dv1 = document.getElementById("dv1"),
- dv2 = document.getElementById("dv2");
- dv1.onclick = function(){
- alert("dv1")
- }
- dv2.onclick = function(e){
- var e = window.event || e;
- // e.stopPropagation() ;//非IE 阻止冒泡
- // e.cancelBubble =true; // IE 阻止冒泡
- //兼容
- if(e.stopPropagation){
- e.stopPropagation() ;
- }else{
- e.cancelBubble =true;
- }
- alert("dv2");
- }*/
- //事件阻止默认行为
- var oA = document.getElementById("oA");
- oA.onclick = function(e){
- var e = window.event || e ;
- e.preventDefault();
- }
- var box = document.getElementById("box");
- box.oncontextmenu = function(e){ //右击
- var e = window.event || e ;
- // e.preventDefault(); //非IE
- // e.returnValue = false ; //ie
- //兼容处理
- if(e.preventDefault) {
- e.preventDefault(); //非IE
- }else {
- e.returnValue = false ; //ie
- }
- alert(1);
- }
- document.oncontextmenu = function(e){ //屏蔽右键默认
- // var e = window.event || e ;
- //兼容处理
- if(e.preventDefault) {
- e.preventDefault(); //非IE
- }else {
- e.returnValue = false ; //ie
- }
- e.preventDefault();
- }
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title></title>
- <link rel="stylesheet" href="style.css" />
- </head>
- <body>
- <!--鼠标事件-->
- <!--<div id="box" onclick="alert(fn(5,1))">我是box</div>--><!--html事件处理程序 :-->
- <!-- 事件属性-->
- <!--<div id="box">
- <p> 我是box </p>
- <span> 1111 </span>
- </div>-->
- <!-- 事件委托-->
- <!--<input type="button" id="btn" value="添加"/>
- <ul id="uls">
- <li>1</li>
- <li>2</li>
- <li>3</li>
- </ul>-->
- <!--事件阻止冒泡-->
- <!--<div id="dv1">
- <div id="dv2"></div>
- </div>-->
- <!--事件阻止默认行为-->
- <a href="http://www.baidu.com" id="oA">跳转页面</a>
- <form action="a.html"><input type="submit" /></form>
- <div id="box" style="width:300px;height:300px;background:#ADFF2F"></div>
- <script src="script.js"></script>
- </body>
- </html>
- <!--事件流
- <div id="dv1">
- <div id="dv2"></div>
- </div>-->