检测网页中鼠标指针类型的更改

7

当鼠标悬停在不同的页面元素上时,是否有任何触发事件?

理想情况下,应该有这样一个事件:

window.onmousecursorchange = function(e) {
    // e would contain information about the cursor
    // eg. e.type could contain 'text','pointer', etc..
}

注意:解决方案不应涉及jQuery或其他库。

更新:

“可能的重复”问题实际上标记有jQuery,所有答案(没有一个解决问题)都基于jQuery。我正在寻找纯JavaScript解决方案。如果版主认为这不足以保持此问题处于开放状态,请随意关闭。


2
请查看检测光标类型 - Antony
4个回答

2

使用事件 onmouseenter 是可行的。

$('*').mouseenter(function(){
    var currentCursor = $(this).css('cursor') ;
    console.log( currentCursor );
});

这只有在元素事先设置了style.cursor属性才能生效,比如:http://jsfiddle.net/jrHcY/ 中的两个项目都返回'auto'。 - lostsource
@FelixKling 你是对的,看起来有点不一致,因为它在Chrome 24上记录了“auto”。 - lostsource

2
你可以尝试这个方法:
document.addEventListener('mouseover',function(e){
    var cursor = e.target.style.cursor;
    console.log(cursor);
});

它使用事件冒泡来提高性能并节省代码。

2
通过这种方法,光标始终是一个空字符串。 - Mayank Kumar Chaudhari

1

@Lickson的解决方案这里仅适用于内联样式。对于在CSS文件中定义的光标无效。因此,您需要getComputedStyle

document.addEventListener('mouseover',function(e){
    var cursor = getComputedStyle(e.target).cursor;
    console.log(cursor);
});

这是最佳答案,但是当滚动时,mouseover不允许响应。这意味着当你使用鼠标滚轮或触控板滚动时,即使滚动导致光标经过可悬停元素,光标样式的变化也要等到你停止滚动才会生效。目前还没有找到解决方法 :( - ToddPadwick
这对我来说有效! - undefined

1
$(function(){

    $('*').hover(function(){
        $(this).data('hover',1); //store in that element that the mouse is over it
    },

    function(){
        $(this).data('hover',0); //store in that element that the mouse is no longer over it
    });

    window.isHovering = function (selector) {
        return $(selector).data('hover')?true:false; //check element for hover property
    }
});

这个不会检测到更改并且使用了很多jQuery的东西,这使得复制更加困难(OP没有提到jQuery)。 - Felix Kling
我只是贴上我搜索到的内容。我只是想帮忙。如果有错误,那么这个人的回答就是不正确的。https://dev59.com/eXA75IYBdhLWcg3wP2kg 这个人得到了最好的答案,太遗憾了。 - catherine
1
首先,你不应该抄袭另一个答案。如果另一个答案确实适用,你应该投票关闭或标记此问题为重复的其他问题。第二,另一个问题是不同的(因此答案在这里不适用)。这个问题正在问如何检测光标形状的变化,而另一个问题则是如何检测光标是否悬停在给定元素上。 - Felix Kling
是的,抱歉我忘记放链接了,我直接回答并转到其他问题。我不知道如何投票关闭,这是我第一次加入stackoverflow。我只是在享受回答的乐趣 :) - catherine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接