zoukankan      html  css  js  c++  java
  • 事件对象

    事件对象是js中处处可见,但之前一直对齐的了解一直是稀里糊涂的,今天重新听了一下课程,谨记!

    一、事件对象是什么?它存在哪里呢?

      当触发某个事件时,会产生一个事件对象,这个对象包含着所有与事件有关的信息,包括导致事件的元素、事件类型、以及其它与特定事件相关的信息。

      事件对象,一般称为event对象,这个对象是浏览器通过函数把这个对象作为参数传递过来。

      W3C直接接收event对象,IE自己定义了一个event对象,在window.event上获取。

    <script type="text/javascript">
            document.onclick = function (evt) {
                var e =  evt || window.event; //W3C,IE
                console.log(e); //MouseEvent 鼠标事件
            }
    </script>

      

     在需要通过一个函数处理多个事件时,可以使用type属性

    var btn = document.getElementById("myBtn");
    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 = "green";
                break;
          }
    
    };
    btn.onclick = handler;
    btn.onmouseover = handler;
    btn.onmouseout = handler

    二、跨浏览器的事件对象

      给EventUtil添加关于事件对象的新方法。

    //写在前面

    var btn = document.getElementById("myBtn");
    btn.onclick = function(event){
         event = EventUtil.getEvent(event);
    };
    
    var EventUtil = {
          addHandler:function(element, type, handler){
               //详见《事件》文章。
          },
          getEvent:function(event){
               return event?event:window.event;
           },
           getTarget:function(event){          //获取目标元素
               return event.target || event.srcElement;
           },
           preventDefault:function(event){     //取消默认行为
               if(event.preventDefault){
                   event.preventDefault();
               }else{ 
                    event.returnValue = false;
               }
           },
           removeHandler:function(element, type, handler){
             //详见《事件》文章。
           },
           stopPropagation:function(event){   //取消事件冒泡
                  if(event.stopPropagation){
                      event.stopPropagation();
                  }else{
                           event.cacelBubble = true;
                  }
           }
    }        

      调用方法:

    var btn = document.getElementById("myBtn");
    btn.onclick = function(event){
         event = EventUtil.getEvent(event);
         var target = EventUtil.getEvent(event);
    };    

    三、 鼠标事件

       通过事件对象可以获取鼠标按钮信息和屏幕坐标等

       1.鼠标按钮    event对象中有一个button属性,表示按下或释放按钮。

     

    PS:W3C中的button属性和IE的有所不同,以W3C为标准。

    document.onmouseup = function () {
                        alert(getButton(evt));
                    }
    
                    //跨浏览器鼠标按钮
                    function getButton(evt){
                        var e = evt || window.event;
                        if (evt) {
                            return e.button;
                        } else if(window.event){
                            switch(e.button){
                                case 1:
                                    return 0;
                                case 4:
                                    return 1;
                                case 2:
                                    return 2;
                                case 0:         //360
                                    return 2;
                            }
                        };
    
                    }
    
                    document.onmousedown = function(evt){
                        if (getButton(evt) == 0) {alert("左键")};
                        if (getButton(evt) == 1) {alert("中键")}
                        if (getButton(evt) == 2)  {alert("右键")}
                    }

    2.可视区及屏幕坐标

      事件对象有连个获取浏览器坐标的属性,1.页面可视区坐标。2.屏幕可视区坐标。3.页面坐标位置

    document.onclick = function (evt){
                        var e = evt || window.event;
                        // alert(e.clientX + "," + e.clientY);
                        alert(e.screenX + "," + e.screenY);
               alert(e.pageX + e.pageY); }

     3.修改键

      这些键Shift、Ctrl、Alt和Meat(Window中的Windows键,苹果机中的Cmd键),经常用它们来修改鼠标事件和行为,因此称它们为修改键。

    function getKey(evt){
                    var e = evt || window.event;
                    var keys = [];
                    if(e.shiftKey) keys.push("shift");
                    if (e.ctrlKey) {keys.push("ctrl")};
                    if (e.altKey) {keys.push("alt")};
                    return keys;
                }
    
                document.onclick = function(evt){
                    alert(getKey(evt))
                }
  • 相关阅读:
    Windows如何快速远程到另一台Windows并管理多个远程服务器
    基于视觉反馈的步进电机X-Y平台控制
    相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标
    相机位姿估计2:[应用]实时位姿估计与三维重建相机姿态
    相机位姿估计1_1:OpenCV:solvePnP二次封装与性能测试
    求空间内两条直线的最近距离以及最近点的坐标(C++)
    相机位姿估计1:根据四个特征点估计相机姿态
    相机位姿估计0:基本原理之如何解PNP问题
    记2016年中国移动广西公司面试(计算机类)
    子坐标系C在父坐标系W中的旋转问题
  • 原文地址:https://www.cnblogs.com/wine/p/5230045.html
Copyright © 2011-2022 走看看