这就是我所做的,它在 2017 年开始在 Firefox、Chrome、Edge 和 IE 中运行。
将此 CSS 规则添加到您的页面:
html.reset-all-cursors *
{
cursor: inherit !important;
}
当<html>
元素具有“reset-all-cursors”类时,这会覆盖在其style
属性中为元素单独设置的所有游标——而无需实际操作元素本身。不需要到处清理。
然后,当您想用 any 覆盖整个页面上的光标时element
,例如。G。被拖动的元素,在 JavaScript 中执行此操作:
element.setCapture && element.setCapture();
$("html").addClass("reset-all-cursors");
document.documentElement.style.setProperty("cursor", $(element).css("cursor"), "important");
它使用setCapture
可用的功能。这目前只是 Firefox,尽管他们说它是 Microsoft API。然后将特殊类添加到整个文档中,从而禁用所有自定义光标。最后在文档上设置你想要的光标,让它出现在任何地方。
结合捕获事件,这甚至可以将拖动光标扩展到页面和浏览器窗口之外。setCapture
在 Firefox 中可靠地做到这一点。但在其他地方,它并非每次都有效,具体取决于浏览器、它的 UI 布局以及鼠标光标离开窗口的路径。;-)
完成后,清理:
element.releaseCapture && element.releaseCapture();
$("html").removeClass("reset-all-cursors");
document.documentElement.style.setProperty("cursor", "");
这包括 jQueryaddClass
和removeClass
. 在简单的场景中,您可以简单地比较并class
设置document.documentElement
. 不过,这会破坏像 Modernizr 这样的其他库。如果您已经知道元素所需的光标,则可以摆脱该css
功能,或者尝试类似element.style.cursor
.