JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)

摘要:
鼠标操作导致的事件对象中的特殊属性和方法鼠标事件是Web上面最常用的一类事件,毕竟鼠标还是最主要的定位设备。所以,我们只需要做上这三种兼容即可。functiongetButton{//跨浏览器左中右键单击相应vare=evt||window.event;if{        //Chrome浏览器支持W3C和IEreturne.button;      //要注意判断顺序}elseif{switch{case1:return0;case4:return1;case2:return2;}}}window.onload=function(){document.onmouseup=function{//调用if{alert('按下了左键!

鼠标操作导致的事件对象中的特殊属性和方法

鼠标事件是 Web 上面最常用的一类事件,毕竟鼠标还是最主要的定位设备。那么通过事件对象可以获取到鼠标按钮信息和屏幕坐标获取等

鼠标按钮

只有在主鼠标按钮被单击时(常规一般是鼠标左键)才会触发 click 事件,因此检测按钮的信息并不是必要的

但对于 mousedown 和 mouseup 事件来说,则在其 event 对象存在一个 button 属性,表示按下或释放按钮

JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)第1张

<script type="text/javascript">window.onload = function(){
        document.onclick = function(evt) {
            vare =evt ||window.event;             //实现跨浏览器兼容获取 event 对象
alert(e.button);
        };
    };
</script>
</head>
<body>
    <input  type="button"value="按钮"/>
</body>

在绝大部分情况下,我们最多只使用主次中三个单击键,IE 给出的其他组合键一般无法使用上。所以,我们只需要做上这三种兼容即可。

<script type="text/javascript">

    functiongetButton(evt) {                 //跨浏览器左中右键单击相应
        vare =evt ||window.event;
        if(evt) {                 //Chrome 浏览器支持 W3C 和 IE
            returne.button;       //要注意判断顺序
} else if(window.event) {
            switch(e.button) {
                case 1:
                    return 0;
                case 4:
                    return 1;
                case 2:
                    return 2;
            }
        }
    }
    window.onload = function(){
        document.onmouseup = function(evt){ //调用
            if(getButton(evt) == 0) {
                alert('按下了左键!');
            }else if(getButton(evt) == 1){
                alert('按下了中键!');
            }else if(getButton(evt) == 2){
                alert('按下了右键!');
            }
        };
    };
</script>

可视区及屏幕坐标

事件对象提供了两组来获取浏览器坐标的属性,一组是页面可视区左边,另一组是屏幕坐标

JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)第2张

<style>#box{width:300px;height:300px;border:1px solid red;
    }
</style>
<script type="text/javascript">window.onload = function() {
        varoDiv =document.getElementById('box')
        oDiv.onclick = function(evt) {
            console.log(evt.clientX + ',' +evt.clientY);
            console.log(evt.screenX + ',' +evt.screenY);
        };
    }
</script>
<body>
    <div id="box"></div>
</body>

JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)第3张

<style type="text/css">#areaDiv {border:1px solid black;width:300px;height:50px;margin-bottom:10px;
    }#showMsg {border:1px solid black;width:300px;height:20px;
    }
</style>
<script type="text/javascript">window.onload = function(){
        /** 当鼠标在areaDiv中移动时,在showMsg中来显示鼠标的坐标
         */
        //获取两个div
        varareaDiv =document.getElementById("areaDiv");
        varshowMsg =document.getElementById("showMsg");
        
        /** onmousemove
         *     - 该事件将会在鼠标在元素中移动时被触发
         * 
         * 事件对象
         *     - 当事件的响应函数被触发时,浏览器每次都会将一个事件对象作为实参传递进响应函数,
         *         在事件对象中封装了当前事件相关的一切信息,比如:鼠标的坐标  键盘哪个按键被按下  鼠标滚轮滚动的方向。。。
         */areaDiv.onmousemove = function(event){
            /** 在IE8中,响应函数被触发时,浏览器不会传递事件对象,
             *     在IE8及以下的浏览器中,是将事件对象作为window对象的属性保存的
             */
            //解决事件对象的兼容性问题
event =event ||window.event;
            
            /** clientX可以获取鼠标指针的水平坐标
             * cilentY可以获取鼠标指针的垂直坐标
             */
            varx =event.clientX;
            vary =event.clientY;

            //在showMsg中显示鼠标的坐标
showMsg.innerHTML = "x = "+x + ", y = "+y;
        };
    };
</script>
</head>
<body>
    <div id="areaDiv"></div>
    <div id="showMsg"></div>
</body>

JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)第4张

实现一个div跟随着鼠标移动

<style type="text/css">#box1{width:100px;height:100px;background-color:red;position:absolute;
        }
    </style>
    <script type="text/javascript">window.onload = function(){
            //使div可以跟随鼠标移动
            varbox1 =document.getElementById("box1");//获取box1
document.onmousemove = function(event){ //绑定鼠标移动事件
                //解决兼容问题
event =event ||window.event;
                
                //获取滚动条滚动的距离
                /** chrome认为浏览器的滚动条是body的,可以通过body.scrollTop来获取
                 * 火狐等浏览器认为浏览器的滚动条是html的,
                 */
                varst =document.body.scrollTop ||document.documentElement.scrollTop;
                varsl =document.body.scrollLeft ||document.documentElement.scrollLeft;
              
                //获取到鼠标的坐标
                /** clientX和clientY
                 *     用于获取鼠标在当前的可见窗口的坐标
                 * div的偏移量,是相对于整个页面的
                 * 
                 *  pageX和pageY可以获取鼠标相对于当前页面的坐标
                 *     但是这个两个属性在IE8中不支持,所以如果需要兼容IE8,则不要使用
                 */
                varleft =event.clientX;
                vartop =event.clientY;
                
                //设置div的偏移量
box1.style.left =left +sl + "px";
                box1.style.top =top +st + "px";
            };
        };
    </script>
</head>
<body style="height: 1000px; 2000px;">
    <div id="box1"></div>
</body>

修改键

有时,我们需要通过键盘上的某些键来配合鼠标来触发一些特殊的事件

这些键为:Shfit、Ctrl、Alt 和 Meat(Windows 中就是 Windows 键,苹果机中是 Cmd 键),它们经常被用来修改鼠标事件和行为,所以叫修改键。(结合鼠标)

<style>#box{width:300px;height:300px;border:1px solid red;
    }
</style>
<script type="text/javascript">
    functiongetKey(evt) {
        vare =evt ||window.event;
        varkeys =[];
        if(e.shiftKey){
            keys.push('shift'); //给数组添加元素
}
        if(e.ctrlKey){
            keys.push('ctrl');
        }
        if(e.altKey){
            keys.push('alt');
        }

        returnkeys;
    }
    window.onload = function(){
        varoDiv =document.getElementById('box')
        oDiv.onclick = function(evt) {
            console.log(getKey(evt));
        };
    };
</script>
<body>
    <div id="box"></div>
</body>

JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)第5张

键盘操作导致的事件对象中的特殊属性和方法

用户在使用键盘时会触发键盘事件。“DOM2 级事件”最初规定了键盘事件,结果又删除了相应的内容。最终还是使用最初的键盘事件,不过 IE9 已经率先支持“DOM3”级键盘事件。

键码

在发生 keydown 和 keyup 事件时,event 对象的 keyCode 属性中会包含一个代码,与键盘上一个特定的键对应。

对数字字母字符集,keyCode 属性的值与 ASCII 码中对应小写字母或数字的编码相同。字母中大小写不影响

window.onload = function(){
    document.onkeydown = function(evt) {
        alert(evt.keyCode); //按任意键,得到相应的 keyCode
};
};

不同的浏览器在 keydown 和 keyup 事件中,会有一些特殊的情况:

在 Firefox 和 Opera 中,分号键时 keyCode 值为 59,也就是 ASCII 中分号的编码;而 IE和 Safari 返回 186,即键盘中按键的键码。

如果用keypress返回keyCode,在火狐中所有的字符键都返回0,不是字符键没反应。Chrome,IE支持keypress返回keyCode,而且还支持大小写

window.onload = function(){
    document.onkeypress = function(evt) {
        alert(evt.keyCode); //按任意键,得到相应的 keyCode
};
};

字符编码

Firefox、Chrome 和 Safari 的 event 对象都支持一个 charCode 属性,这个属性只有在发生 keypress 事件时才包含值,而且这个值是按下的那个键所代表字符的 ASCII 编码。

此时的 keyCode 通常等于 0 或者也可能等于所按键的编码。IE 和 Opera 则是在 keyCode 中保存字符的 ASCII 编码。

window.onload = function(){
    document.onkeypress = function(evt) {
        alert(evt.charCode);         //按任意键,得到相应的字符编码
};
};

事件对象中还提供了几个属性:altKey,ctrlKey,shiftKey,这个三个用来判断alt ctrl 和 shift是否被按下,如果按下则返回true,否则返回false

<script type="text/javascript">window.onload = function(){
    document.onkeydown = function(event){
      event =event ||window.event;
      if(event.ctrlKey){
        console.log("ctrl被按下了"); //结果就是当焦点在document上的时候按下ctrl就会执行
}
    }
  };
</script>

免责声明:文章转载自《JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇javascript里label语句的简单示例Json.Net序列化和反序列化设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

鼠标滚轮事件

<script> var EventUtil = { addHandler: function(element,type,handler){//添加事件 if (element.addEventListener) {...

通过SSE(Server-Send Event)实现服务器主动向浏览器端推送消息

一、SSE介绍 1.EventSource 对象 SSE 的客户端 API 部署在EventSource对象上。下面的代码可以检测浏览器是否支持 SSE。 if (‘EventSource’ in window) {  }  使用 SSE 时,浏览器首先生成一个EventSource实例,向服务器发起连接。 var source = new EventSo...

div拖拽, onmousedown ,onmousemove, onmouseup

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text/css"> 7...

QT基础三

4.1The Central Widget QMainWindow的中央区域可以被任何类型的widget占据。 4.2Subclassing QTableWidget QTableWidget会自动创建QTableWidgetItem来存储用户的输入。 QTableWidgetItem类并不是widget,而是一个纯粹的data class。 QTabeW...

火狐浏览器(firefox)中js要注意的问题

1.出现错误调用error方法或者ajax请求了多次,那么极有可能是异步请求的原因。 添加async : false , ->async. 默认是 true,即为异步方式,$.ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.ajax里的success方法,这时候执行的是两个线程。 -> async 设置为 fals...

js键盘事件全面控制详细解析

js键盘事件全面控制 主要分四个部分第一部分:浏览器的按键事件第二部分:兼容浏览器第三部分:代码实现和优化第四部分:总结 第一部分:浏览器的按键事件 用js实现键盘记录,要关注浏览器的三种按键事件类型,即keydown,keypress和keyup,它们分别对应onkeydown、 onkeypress和onkeyup这三个事件句柄。一个典型的按键会产生所...