我在div上有一个textarea.在div中,我突出显示输入textarea的文本的某些部分.我试图将鼠标悬停在高光上的事件上,但显然我不能,因为它们在我的文本区域下.我想是否可以使用textarea上的mousemove事件跟踪鼠标坐标,但后来我认为这对我没有好处,因为如果突出显示跨度我无法确定确切的边界.
所以问题是,如何为不接收这些元素的元素模拟mouseover和mouseout事件,因为它们位于其他元素之下?
编辑:
我根据Marcus的回答完成了一个解决方法. mouseover / mouseout事件的完整代码:
var mouseDown = false;
var mouseIsOver = false;
var lastOverElem = false;
textarea.mousemove(function(e) {
if (!mouseDown) {
textarea.hide();
var elm = $(document.elementFromPoint(e.pageX, e.pageY));
textarea.show();
if (elm.hasClass("highlighted")) {
/* MOUSE MOVE EVENT */
if (!mouseIsOver) {
mouseIsOver = true;
/* MOUSE OVER EVENT */
}
} else {
if (mouseIsOver) {
mouseIsOver = false;
if (lastOverElem) {
/* MOUSE OUT EVENT */
}
}
}
}
});
$('body').mousedown (function () {mouseDown = true;});
$('body').mouseup (function () {mouseDown = false;});
最佳答案 您可以使用
document.elementFromPoint
.显然,如果textarea位于底层突出显示容器的前面,这不起作用,但是有一个应用程序.您只需要在调用document.elementFromPoint之前暂时隐藏textarea,然后直接显示它.
var textarea = $("#linksTextarea");
textarea.on("mousemove", function(e) {
// Temporarily hide the textarea
textarea.hide();
// Get element under the cursor
var elm = $(document.elementFromPoint(e.pageX, e.pageY));
// Show the textarea again
textarea.show();
if (elm.hasClass("highlighted")) {
console.log("You're mouse is over highlighted text");
}
});
由于DOM是实时更新的,而它的渲染延迟到所有JavaScript执行完毕后,您不必担心任何视觉故障.