十年专注于品牌网站建设 十年专注于品牌网站建设,低调、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

javascript中修改键Shift、Ctrl、Alt、Meta事件判断方法

百恒网络 2016-12-21 824

虽然组合键即修改键在当前的网页中操作不是很常见,但有些快捷操作我们还是会偶尔用到的,所以在此以一个简短的篇幅进行介绍。
       鼠标事件主要是使用鼠标来触发的,但在按下鼠标时键盘上的某些键的状态也可以影响到所要 采取的操作。这些修改键就是 Shift、Ctrl、Alt和 Meta(在 Windows键盘中是 Windows键,在苹果机中 是 Cmd 键),它们经常被用来修改鼠标事件的行为。DOM 为此规定了 4 个属性,表示这些修改键的状 态:shiftKey、ctrlKey、altKey 和 metaKey。这些属性中包含的都是布尔值,如果相应的键被按 下了,则值为 true,否则值为 false。当某个鼠标事件发生时,通过检测这几个属性就可以确定用户 是否同时按下了其中的键。来看下面的例子。 

var div = document.getElementById("myDiv"); 
       EventUtil.addHandler(div, "click", function(event){ 
       event = EventUtil.getEvent(event); 
       var keys = new Array(); 

if (event.shiftKey){ 
       keys.push("shift"); 
   } 

if (event.ctrlKey){ 
       keys.push("ctrl"); 
   } 

if (event.altKey){
        keys.push("alt");
   } 

if (event.metaKey){
        keys.push("meta");
   } 

alert("Keys: " + keys.join(",")); 

});
       在这个例子中,我们通过一个 onclick 事件处理程序检测了不同修改键的状态。数组 keys 中包 含着被按下的修改键的名称。换句话说,如果有属性值为 true,就会将对应修改键的名称添加到 keys 数组中。在事件处理程序的后,有一个警告框将检测到的键的信息显示给用户。 
       南昌app开发公司百恒网络开发工程师提配大家,IE9、Firefox、Safari、Chrome和 Opera都支持这 4个键。IE8及之前版本不支持 metaKey 属性。 

       <!DOCTYPE html>
<html>
<head>
<title>Modifier Keys Example</title>
<script type="text/javascript" src="EventUtil.js"></script>
</head>
<body>
<div id="myDiv" style="background-color:red;height:100px;width:100px">Click me while holding a modifier key</div>
<script type="text/javascript">
var div = document.getElementById("myDiv");
EventUtil.addHandler(div, "click", function(event){
event = EventUtil.getEvent(event);
var keys = new Array();

if (event.shiftKey){
keys.push("shift");
}

if (event.ctrlKey){
keys.push("ctrl");
}

if (event.altKey){
keys.push("alt");
}

if (event.metaKey){
keys.push("meta");
}

alert("Keys: " + keys.join(","));

}); 
        </script>
</body>
</html>
复制页中代码存为EventUtil.js文件如下:
       var EventUtil = {
        addHandler: function(element, type, handler){
if (element.addEventListener){
element.addEventListener(type, handler, false);
} else if (element.attachEvent){
element.attachEvent("on" + type, handler);
} else {
element["on" + type] = handler;
}
},

getButton: function(event){
if (document.implementation.hasFeature("MouseEvents", "2.0")){
return event.button;
} else {
switch(event.button){
case 0:
case 1:
case 3:
case 5:
case 7:
return 0;
case 2:
case 6:
return 2;
case 4: return 1;
}
}
},

getCharCode: function(event){
if (typeof event.charCode == "number"){
return event.charCode;
} else {
return event.keyCode;
}
},

getClipboardText: function(event){
var clipboardData = (event.clipboardData || window.clipboardData);
return clipboardData.getData("text");
},

getEvent: function(event){
return event ? event : window.event;
},

getRelatedTarget: function(event){
if (event.relatedTarget){
return event.relatedTarget;
} else if (event.toElement){
return event.toElement;
} else if (event.fromElement){
return event.fromElement;
} else {
return null;
}

},

getTarget: function(event){
return event.target || event.srcElement;
},

getWheelDelta: function(event){
if (event.wheelDelta){
return (client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta);
} else {
return -event.detail * 40;
}
},

preventDefault: function(event){
if (event.preventDefault){
event.preventDefault();
} else {
event.returnValue = false;
}
},
        removeHandler: function(element, type, handler){
if (element.removeEventListener){
element.removeEventListener(type, handler, false);
} else if (element.detachEvent){
element.detachEvent("on" + type, handler);
} else {
element["on" + type] = null;
}
},

setClipboardText: function(event, value){
if (event.clipboardData){
event.clipboardData.setData("text/plain", value);
} else if (window.clipboardData){
window.clipboardData.setData("text", value);
}
},

stopPropagation: function(event){
if (event.stopPropagation){
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
       };

  本文仅限内部技术人员学习交流,不得作于其他商业用途.希望此文对广大技人员有所帮助。原创文章出自:南昌网站建设公司-百恒网络http://www.jxbh.cn/如转载请注明出处!

400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×