zoukankan      html  css  js  c++  java
  • 鼠标事件(二)

    在鼠标事件的事件对象中,相应的保存着与该事件对应的信息。

    • 当鼠标主按钮(默认左键)按下并抬起时,触发click事件,这个信息是固定的。但当发生mousedown和mouseup时,event就会有一个button属性来保存按下或抬起的键。当event.button为0时是主键(左键),为1时是滚轮,为2时是次键(右键)。然而,IE8则保存完全不同的信息而且比较复杂:

      0:没有按下鼠标键

      1:按下鼠标主键

      2:按下鼠标次键

      3:按下鼠标主键和次键

      4:按下鼠标滚轮

      5:按下鼠标主键和滚轮

      6:按钮鼠标次键和滚轮

      7:同时按下主键、次键和滚轮

    由于主流浏览器支持DOM,因此最好把IE8内保存的信息转换成更为简便的DOM信息。

    EventUtil.getButton = function(event){
      if(document.implementation.hasFature('MouseEvents','2.0')){
        return event.button;
      }else{
        switch(event.button){
          case 0:
          case 1:
          case 3:
          case 5:
          case 7:
            return 0;
            break;
          case 2:
          case 6:
            return 2;
            break;
          case 4:
            return 1;
            break;
        }
      }
    };
    • 在很多情况下,获取鼠标的位置也是非常有用的。通过clientX和clientY就可以获取鼠标相对于浏览器视口的横纵坐标:
    EventUtil.addEvent(document,'mousemove',function(event){
      var event = EventUtil.getEvent(event);   document.title = event.clientX+','+event.clientY; });

      通过pageX和pageY获取鼠标指针相对于页面的距离:

    EventUtil.addEvent(document,'mousemove',function(event){
      var event = EventUtil.getEvent(event);
      document.title = event.pageX+','+event.pageY;
    });

      然而IE8并不支持pageX和pageY,这个时候就需要使用鼠标光标相对于视口的距离和页面滚动距离来计算页面距离,当页面没有滚动时,页面距离就和视口距离相等:

    EventUtil.addEvent(document,'mousemove',function(event){
      var event = EventUtil.getEvent(event);
      var pX = event.pageX;
      var pY = Event.pageY;
      if(pX === undefined){
        var sX = document.documentElement.scrollLeft||document.body.scrollLeft;
        pX = event.clientX + sX;
      }
      if(pY === undefined){
        var sY = document.documentElement.scrollTop||document.body.scrollTop;
        pY = event.clientY + sY;
      }
      document.title = pX + ',' + pY;
    });

      通过event对象,还可以获取鼠标指针相对于屏幕的坐标:

    EventUtil.addEvent(document,'mousemove',function(event){
      var event = EventUtil.getEvent(event);
      document.title = event.screenX + ',' + event.screenY;
    });
  • 相关阅读:
    SpringBoot 启动报 No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available 异常
    踩坑记录:springboot 不识别properties配置文件
    简单说一下MySQL sum(1) count(1) 区别和联系
    @EnableConfigServer 注解无法导入
    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
    阿里云服务器
    穷爸爸富爸爸观后感- 生活的抉择
    java request get 请求乱码解决
    递归与八皇后问题
    编译型语言和解释型语言
  • 原文地址:https://www.cnblogs.com/luoshufang/p/5725795.html
Copyright © 2011-2022 走看看