发布于2021-10-23 03:20 阅读(616) 评论(0) 点赞(7) 收藏(1)
我想在不丢失用户当前焦点的情况下检测控制键的命中。
例如(见下文)用户正在向 textarea 写入内容,textarea 是当前聚焦的元素。然后我的最终用户在 div 上移动他的鼠标(只是悬停,没有点击),如果他按下控制键,我想执行一个功能(keyDown
下面的 那些)。
为了使工作我有一个添加tabIndex
到我的div
,我不得不取消注释theDiv.focus()
这让我伤心的,因为它会导致精力放在我的积极textarea的亏损线。
当鼠标位于特定元素上时,如何同时检测某人是否按下了键,而不会失去当前元素的焦点?
var theDiv = document.getElementById("theDiv");
function entered(e) {
theDiv.addEventListener("keydown", keyDown);
//theDiv.focus();
}
function keyDown(e) {
alert(e.key)
}
theDiv.addEventListener("mouseover", entered);
#theDiv {
width: 100px;
height: 100px;
border: 1px silver solid;
}
#theDiv:hover {
border: 1px silver dashed;
}
<div id="theDiv" tabindex="-1">
</div>
<div>
<textarea id="a">Click here, then hover the div above and hold "Shift" key</textarea>
</div>
您可以mouseover
向文档添加事件侦听器,以将鼠标悬停在全局变量中的元素存储起来。当keydown
文档上有事件时,div
如果将鼠标悬停在if 上,则阻止默认操作(因此不会将文本打印到 textarea 中)。
var theDiv = document.getElementById("theDiv");
var hoverTarget = document.body;
var res = document.getElementById("result");
document.addEventListener("mouseover", function(e){
hoverTarget = e.target;
});
function keyDown(e) {
res.innerText = "Key: "+e.key+" KeyCode: "+e.keyCode;
}
document.addEventListener("keydown", function(e){
if(hoverTarget===theDiv){
e.preventDefault();
keyDown(e);
}
});
#theDiv {
width: 100px;
height: 100px;
border: 1px silver solid;
}
#theDiv:hover {
border: 1px silver dashed;
}
<div id="theDiv" tabindex="-1">
</div>
<div>
<textarea id="a">Click here, then hover the div above and hold "Shift" key</textarea>
</div>
<span id="result">
</span>
作者:黑洞官方问答小能手
链接:http://www.qianduanheidong.com/blog/article/208438/1355eee615277e8a7899/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!