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. 更换Mac记录

    1. 重装Mac (1)格式化硬盘 (2)重装系统 (3)修改各种配置:电脑名.键盘等 2. 安装必要软件 (1)QQ.微信.网易云音乐等 (2)火狐.谷歌.SourceTree等 (3)安装Git ...

  2. git 常见问题

    RPC failed; error: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), er rno 100 ...

  3. 如何利用python监控主机存活并邮件、短信通知

    功能: 1.使用定时任务执行脚本,检查主机存活信息2.将主机存活信息写入指定文件3.发现宕机的主机后给用户发邮件提醒备注:因为139邮箱在接受到邮件后会自动给用户发送条短信告知(且此服务免费),所以间 ...

  4. PostgreSQL windows service启动失败

    from: http://stackoverflow.com/questions/1251233/unable-to-run-postgresql-as-windows-servicepg_ctl - ...

  5. ueditor的模板功能

    ~~项目临时发现kindeditor比ueditor更好用~~ 不过还是回来把ueditor的学习,加一个书签标明一下阶段. 下面写一下ueditor的模板功能,即修改模板,使ueditor自动生成想 ...

  6. C++ 函数形参发生动态绑定时指针增长步长与静态类型一致

    牛客网上的题: class A { public: long a; }; class B : public A { public: long b; }; void seta1(A* data, int ...

  7. C++学习笔记 知识集锦(二)

    1. 命名规范 2. 代码格式 3. QString的判断 4. 对象的判空 5. 隐式接口&显式接口 6. vector&string 7. static 8. const 9. v ...

  8. requests库基本使用

    在python中,字典的输出内容跟json格式内容一样,但是字典的格式是字典,json的格式是字符串,所以在传输的时候(特别是网页)要转换使用. r.text返回的是Unicode型的数据. r.co ...

  9. 《奥威Power-BI案例应用:带着漫画看报告》腾讯课程开课啦

    元旦小假期过去了,不管是每天只给自己两次下床机会的你,还是唱K看电影逛街样样都嗨的你,是时候重振旗鼓,重新上路了!毕竟为了不给国家的平均工资水平拖后腿,还是要努力工作的.话说2016年已经过去了,什么 ...

  10. TCP/IP、Http、Socket的区别

    1.标准网络层次 网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP. ...