JS事件:
  声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event;
      所以在下面用到 event 的地方都用 oEvent 代替

  1)doucument的本质:是整个文档的根节点,所有的html都包含在document里面,
      不过我们平时都是省略document
          document.childNodes[0].tagName-->!
          document.childNodes[1].tagName-->html

  2)事件对象:即event对象
    在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件相关的信息
    如:获取鼠标的位置,获取键盘按键
    如:不同浏览器下的事件对象:
              IE/Chrom:  event
              FF/IE9+/Chrom:  传参ev
      跨浏览器的事件对象兼容性写法:var oEvent==ev||event;
          document.oncilck=function(ev){
              var oEvent==ev||event;
              if(oEvent){
                  alert(oEvent.clientX);
              }
          }

  3)事件类型:
    1.window上面的事件:
       --window.onload:当页面完全加载完后就会触发onload事件
       --window.onunload:与onload事件相对应,当文档被完全卸载后触发
       --window.onresize:当浏览器窗口大小被改变期间被重复触发
       --window.onscroll:在文档被滚动期间重复触发

    2.焦点事件:
      --element.onblur:元素失去焦点时触发
      --element.onfocus:元素获得焦点时触发

    3.鼠标事件:
      --elelment.onclick:当用户点击某个对象时触发
      --element.ondblclick:当用户双击某个对象时触发
      --elelment.onmousedown:鼠标按键被按下时触发
      --element.onmouseup:鼠标按键被松开时触发
      --element.onmousemove:当鼠标移动时触发
      --element.onmouseover:鼠标移到某元素之上时触发
      --element.onmouseout:鼠标从某元素上面移开时触发

    4.鼠标事件的属性:
      1.--oEvent.button=0|1|2: 当事件被触发时哪个鼠标按键被点击
          非IE下:
            0     表示鼠标左键被点击
            1     表示鼠标中键被点击
            2     表示鼠标右键被点击
          IE下:
            1     表示鼠标左键被点击
            4     表示鼠标中键被点击
            2     表示鼠标右键被点击

      2.--oEvent.clientX,oEvent.clientY:获取鼠标在可视区的相对位置,
        即参照点在浏览器的左上角,会随着滚动条的滚动而变化,在没有滚动条时,
        直接oEvent.clientX,oEvent.clientY即可获取鼠标位置,当有滚动条时,则不能直接使用
        所以获取鼠标的绝对位置可以封装成一个函数:(页面有无滚动条时都可以用)
          function getMousePosition(ev){
            var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
            var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
            return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
          }

        例子2:让一个div跟随鼠标运动:
            document.onmousemove=function(ev){
              var oEvent==ev||event;
              var pos=getMousePosition(oEvent);
              if(oEvent){
                oDiv.style.top=pos.y+'px';
                oDiv.style.left=pos.x+'px';
              }
            }

        例子2:一串div跟随鼠标移动
        (html是很多宽和高都很小的div)
        window.onload=function(ev){
              var oDiv=document.getElementsByTagName('div');
              var oEvent=ev||event;
              var pos=getMousePosition(oEvent);
              for(var i=oDiv.length-1;i>0;i--){    //让后一个div跟着前一个运动
                  oDiv[i].style.left=oDiv[i-1].offsetLeft+'px';
                  oDiv[i].style.top=oDiv[i-1].offsetTop+'px';
              }
              //让第0个div跟着鼠标运动
              oDiv[0].style.top=pos.x+'px';
              oDiv[0].style.left=pos.y+'px';
          }

     3.--oEvent.page.X, oEvent.pageY: 获取的是鼠标的绝对位置,参照点是浏览器的左上角,
        与上面的getMousePosition函数的作用一样,但是IE8及以下不兼容,所以一般不使用,
        获取鼠标的绝对位置还是使用getMousePosition函数

     4.--oEvent.screenX, oEvent.screenY: 获取的是屏幕坐标的位置,参照点是屏幕的左上角,而不是浏览器左上角

     总结:
       1.screenX, clientX, pageX三者的区别:
         --screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角
         --clientX:跟screenX相比就是将参照点改成了浏览器内容区域的左上角,该参照点会随之滚动条的移动而移动
         --pageX:参照点也是浏览器内容区域的左上角,但它不会随着滚动条而变动(不兼容,所以还是使用clientX方法获取鼠标位置)
      2.只要用到event.clientX,event.clientY,obj.clientWidth,obj.clientHeight都要用到scrollTop/scrollLeft

    5.键盘事件:
      --element.onkeydown:某个键盘按键被按下触发
      --element.onkeyup:某个键盘按键被松开时触发

    6.键盘事件的属性:
      1.修改键:是指Shift,Ctrl,Alt,Meta(Windows中指win键,苹果机中指Cmd键)
            这些修改键经常用来修改鼠标事件的行为,所以DOM为此规定了四个属性,
            表示这些修改键的状态,更别为:shiftKey,ctrlKey,altKey,metaKey
            这些属性返回的都是布尔值,当相应的键被按下时,返回true,否则返回false
         使用表示:
            --oEvent.shiftKey
            --oEvent.ctrlKey
            --oEvent.altKey
            --oEvent.metaKey

        ctrl+enter提交留言:
                windown.onload=function(ev){
                    var oEvent=ev||event;
                    var otxt=document.getElementById('txt');
                    txt.onkeydown=function(){
                        if(oEvent.keyCode==13 && oEvent.ctrlKey){
                            otxtArea.value+=otxt.value;
                            otxt.value='';
                        }
                    }
                }

      2.keyCode属性:
          --oEvent.keyCode可以获取鼠标的键码,也可以根据键码,判断用户按下的是哪一个按键
          --在键盘控制或者是鼠标控制运动的过程中,必须要给绝对定位,才能运动
            document.onkeydown=function(ev){
                    var oEvent=ev||event;
                    if(oEvent.keyCode==37){
                        oDiv.style.left=oDiv.offsetLeft-10+'px';
                    }else if(oEvent.keyCode==39){
                        oDiv.style.left=oDiv.offsetLeft+10+'px';
                    }
                }

  7.文本事件:
    1.element.onchange: 当输入域的内容改变时触发
        一般适用于文本域(text field),以及 textarea 和 select 元素
        <input type="text" value="Hello world!" onchange="this.value='abccdef';" />
        或者: oTxt.onchange=function(){
                this.value='abccdef';
              }

    2.element.onselect:文本被选中时触发
    <input type="text" value="Hello world!" onselect="alert('selected text')" />

  8.其他事件:
      --element.onabort:图像的加载被中断时触发
      --element.onerror:在加载文档或图像时发生错误时触发
      --element.onreset:重置按钮被点击时触发
      --element.onsubmit:确认按钮被点击时触发
      --element.oncontextmenu:自定义右键菜单事件,有返回值

  9.补充:
    --什么是浏览器的默认行为:浏览器自己本身就有的一些事件,
        如在页面中我们点击右键,会出来一个浏览器自己的右键菜单; 我们在文本框中输入内容也是一种默认行为
    --阻止默认行为:return false;-->会阻止浏览器所有的默认行为

      示例1:只能输入数字的文本框
            var oTxt=document.getElementById('txt');
            oTxt.onkeydown=function(ev){
                var oEvent=ev||event;
                if(oEvent.keyCode!=8 && (oEvent.keyCode<48||oEvent.keyCode>57)){
                    return false;
                }
            }

      有时候我们需要阻止默认行为,自己定义一个右键菜单出来:
      例子2:右键弹出自己自定义的菜单(自己定义oDiv的样式)
        document.oncontextmenu=function(ev){
          var oEvent=ev||event;
          return false;    //阻止浏览器默认的浏览器右键菜单
          oDiv.style.display='black';
          oDiv.style.left=oEvent.clientX;    //没有滚动条的情况
          oDiv.style.top=oEvent.clientY;
        }
        document.onclick=function(){
          oDiv.style.display='none';  //单击页面其他位置,自定义菜单消失
        }

4)多事件绑定: attachEvent/attachEventLister
  当页面中有两个window.onload时,页面会只执行第二个
    有时我们希望两个相同的函数都能执行,这里需要事件绑定
 
    1)事件绑定:(不兼容需要两个结合做兼容if..else..)
        IE8以下用: attachEvent('事件名',fn);
        FF,Chrome,IE9-10用: attachEventLister('事件名',fn,false);
      
        同一对象绑定两个相同事件,两个事件都会执行
            if(oBtn.attachEvent){
                oBtn.attachEvent('onclick',function(){
                    alert('a');
                });
                oBtn.attachEvent('onclick',function(){
                    alert('b');
                });
            }else{
                oBtn.attachEventLister('click',function(){
                    alert('a');
                },false);
                oBtn.attachEventLister('click',function(){
                    alert('b');
                },false);
            }
        
      多事件绑定封装成一个兼容函数:
          function myAddEvent(obj,ev,fn){
              if(obj.attachEvent){
                  obj.attachEvent('on'+ev,fn);
              }else{
                  obj.attachEventLister(ev,fn,false);
              }
          }
          myAddEvent(oBtn,'click',function(){
              alert(a);
          });
          myAddEvent(oBtn,'click',function(){
              alert(b);
          });

    2)解除绑定:
        IE:detachEvent('事件名',fn);
        FF,Chrome,IE9-10:removeEventLister('事件名',fn,false);

JS事件的更多相关文章

  1. dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...

  2. 什么是JS事件冒泡?

    什么是JS事件冒泡?: 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理 程序或者事件返回true,那么 ...

  3. js事件技巧方法整合

    window.resizeTo(800,600); //js设置浏览器窗口尺寸 window.open (function(){ resizeTo(640,480);//设置浏览器窗口尺寸 moveT ...

  4. js事件浅析

    js中关于DOM的操作很多,因此js事件机制也就尤为重要. 事件绑定形式: 一. 内联形式 耦合度高,不利于维护 <button onclick="alert('你点击了这个按钮'); ...

  5. js 事件大全

    Js事件大全一般事件 事件 浏览器支持 描述onClick IE3|N2|O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClick IE4|N4|O 鼠标双击事件onMouseDo ...

  6. 原生JS事件绑定方法以及jQuery绑定事件方法bind、live、on、delegate的区别

    一.原生JS事件绑定方法: 1.通过HTML属性进行事件处理函数的绑定如: <a href="#" onclick="f()"> 2.通过JavaS ...

  7. 原生js事件和jquery事件的执行顺序问题

    场景:近日,写前端页面时候,在针对输入框input操作时,用到了jquery的插件,插件中使用了jquery的focus()和blur()方法.但是同时,又需要在插件之外再针对输入框的获取焦点和失去焦 ...

  8. 特殊js事件

    1:点击enter事件 $(document).keypress(function(e) { // 回车键事件 if(e.which == 13) { submitForm(); } }); 2:JQ ...

  9. js 事件

    事件:一般用于浏览器与用户操作进行交互 js事件的三种模型:内联模型.脚本模型.DOM2模型 内联模型:事件处理函数是HTML标签的属性 <input type="button&quo ...

随机推荐

  1. OMXplayer播放视频的参数说明

    1.OMXplayer支持硬解码,因此是一个非常不错的选择.2.支持格式目前知道的有:MKV.AVI.FLV.MP43.如果想用全屏播放,参数是:-r4.如果想用HDMI输出声音,参数是:-o hdm ...

  2. windows核心编程 - 线程同步机制

    线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...

  3. php count()函数用法 及其 一个坑

    用法 count() 函数返回数组中元素的数目. count(array,mode); [mode] 0 - 默认.不计算多维数组中的所有元素. 1 - 递归地计算数组中元素的数目(计算多维数组中的所 ...

  4. Method Swizzling

    学习博客: http://www.cocoachina.com/ios/20160121/15076.html (这个作者太牛了,写了我一直想知道的类簇的swizz方法) 一. 一般的swizz 先给 ...

  5. Error of "Please Check for Sufficient Write File Permissions"

    The error message “Please check for sufficient write file permissions” is generated by the Web-based ...

  6. phpstudy的apache端口没有被占用,也有vc9,防火墙也没开,也开杀毒软件,就是无法启动apache

    我电脑装了一个独立的apche和一个phpstudy的apache,我学习是教学视频是php5.2而phpstudy刚好支持. 但是我在选取phpstudy的php版本5.3n以上就无法启动apach ...

  7. IE8文件下载启用

    在IE8的浏览器中,需要进行一些设置 Internet选项→安全→本地Intranet→自定义级别→下载→文件下载→启用 禁用迅雷下载:工具栏和扩展→迅雷下载支持→右键禁用

  8. SSIS 连接ORACLE 无法从 SQL 命令中提取参数的解决方案

    第一步:  定义包变量:maxdate 类型为String  定义包变量:sqlStatement类型为String,值为:select * from i_out_serv_mon 第二步:  取&q ...

  9. 游戏机制(Machinations)在线演示工具

    >>> http://www.jorisdormans.nl/machinations/

  10. 向Android模拟器中批量导入通讯录联系人

    使用adb命令向Android模拟器中批量导入通讯录联系人的方法: 使用adb提供的命令, 可以非常方便地从PC中将通讯录批量导入android模拟器中. 首先要先准备好固定格式的vcf文件, 该文件 ...