当使用jQuery或类似的库悬停某个元素(div
)而没有时,是否可以检查键盘上的键是否被按下了?
答案 0 :(得分: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
- 但概念保持不变。
答案 1 :(得分:3)
这是一个纯粹的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
。
答案 2 :(得分:0)
尝试Shift + mouseover with jQuery转换应该可以改变你想要的任何键我相信。并且您想尝试在接受的答案中提出的第二个选项。
答案 3 :(得分:0)
你的答案是肯定的,这是可能的。
你必须在hover(onmouseover)上添加一个javascript事件,在div上设置同一div上的keydown事件。
当用户再次停止悬停时(onmouseout),您将不得不删除keydown事件。
答案 4 :(得分: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');
...
});
请参阅此list of key以了解与角色相关联的javascript键码
编辑:我刚刚发表了关于不使用应该包含在问题中的jQuery的评论
答案 5 :(得分:-1)
您可以将jquery用于此目的
$("p").hover(function(){
//Your code
});
或者
$(".selector").on({
mouseenter: function () {
//stuff to do on mouseover
},
mouseleave: function () {
//stuff to do on mouseleave
}
});