【问题标题】:Is point over element in jquery是指向jQuery中的元素
【发布时间】:2013-06-26 12:02:54
【问题描述】:

我在 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;});

【问题讨论】:

  • stackoverflow.com/questions/1009753/… 有很多想法可以帮到你。
  • 非常有趣。但是,我需要另一个元素上方的文本区域,以便用户可以键入文本、选择它、对其进行上下文菜单等。pointer-events:none;禁用所有这些功能。还 +1 向我展示了我从未知道存在的技术
  • 该页面上的一个答案建议暂时隐藏文本区域,然后使用 document.elementFromPoint 方法将事件传递给被覆盖的元素。但是不确定效果如何。
  • @ScottMutch 实际上在实施我的测试用例之前没有阅读您的评论,但这正是它的完成方式:)

标签: jquery html mouseover mouseout


【解决方案1】:

您可以使用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 执行完毕后,您不必担心任何视觉故障。

test case on jsFiddle

【讨论】:

  • 我修改了您的小提琴以添加 mousemove 事件。但我想听听你的意见。所以..jsfiddle.net/pLQYM/1 你怎么看?是不是太hackish了?还是会在大型项目中站稳脚跟?
  • @19greg96 为什么会太老套?没有更好的方法了;)我可能会结合mousedownmouseup,并使用document 而不是body,因为它的选择要快一点。 Here's an updated fiddle.
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多