在不使用 jQuery 或类似库的情况下悬停某个元素 ( div
)时是否可以检查是否按下了键盘上的键?
问问题
4602 次
5 回答
4
这是一个纯JS实现:
myElement = document.getElementById('mydiv');
function keyaction(e){
myElement.innerHTML+= String.fromCharCode(e.charCode);
}
myElement.addEventListener("mouseover",function() {
document.addEventListener("keypress", keyaction);
});
myElement.addEventListener("mouseout",function() {
document.removeEventListener("keypress", keyaction, false);
});
这是一个演示:http: //jsfiddle.net/bAV6f/1/
div
当它悬停时输入。
于 2012-11-28T10:01:09.610 回答
4
这是一个简单的 JavaScript 解决方案:
var yourDiv = document.getElementById("yourdiv"); //cache your div
var keyPressed = 0; //kinda-boolean flag, if it's not 0 then at least one key is pressed
document.onkeydown = function() { //when a key is "down"
keyPressed ++; //increment the counter of "down" keys
};
document.onkeyup = function() { //when a key is "released"
keyPressed --; //decrement the counter of "down" keys
keyPressed = Math.max(0, keyPressed); //make sure it doesn't go negative
};
yourDiv.onmouseover = function() { //when you hover your div
if(keyPressed !== 0) { //if a key is pressed
//do stuff
}
};
以上仅在鼠标进入您的div
. 如果您希望它在其内部移动时触发,请改用该onmousemove
事件:
yourDiv.onmousemove = function() { //when the mouse moves inside your div
if(keyPressed !== 0) { //if a key is pressed
//do stuff
}
};
请注意,您可以使用而addEventListener
不是直接设置onkeydown
和-- 但概念保持不变。onkeyup
onmousemover
于 2012-11-28T10:02:03.050 回答
0
你的答案是肯定的,这是可能的。
您必须在 div 上的悬停 (onmouseover) 上添加一个 javascript 事件,该事件在同一 div 上设置 keydown 事件。
当用户再次停止悬停(onmouseout)时,您必须删除 keydown 事件。
于 2012-11-28T09:55:22.250 回答
0
简短回答者
是的,有可能
但是,如果可能的话怎么办?
好吧,使用 Jquery 非常简单:
$("div#selector").mouseover(function(e) {
if (e.ctrlKey)
alert('You are hover selector and pressing ctrl');
if (e.altKey)
alert('You are hover selector and pressing alt');
if (evt.which == 77)
alert('You are hover selector and pressing m');
...
});
查看此键列表以了解与字符关联的 javascript 键码
编辑:我刚刚阅读了您关于不使用 jQuery 的评论,该评论应包含在问题中
于 2012-11-28T10:18:47.570 回答
-1
您可以为此目的使用 jquery
$("p").hover(function(){
//Your code
});
或者
$(".selector").on({
mouseenter: function () {
//stuff to do on mouseover
},
mouseleave: function () {
//stuff to do on mouseleave
}
});
于 2012-11-28T09:56:36.120 回答