這是我做的,它在火狐,Chrome,Edge和IE工程作爲2017年
這個CSS規則添加到您的網頁:
html.reset-all-cursors *
{
cursor: inherit !important;
}
當<html>
元素具有「reset-all-cursors」類,它將覆蓋爲style
屬性中的元素單獨設置的所有遊標 - 而不實際操作元素本身。沒有必要清理整個地方。
然後,當您想要覆蓋整個頁面上的光標時,使用任何element
即e。 G。元素被拖動,在JavaScript這樣做:
element.setCapture && element.setCapture();
$("html").addClass("reset-all-cursors");
document.documentElement.style.setProperty("cursor", $(element).css("cursor"), "important");
它使用setCapture
函數,其中可用。目前這只是Firefox,儘管他們說這是一個微軟API。然後將特殊類添加到整個文檔中,禁用所有自定義遊標。最後在文檔上設置你想要的光標,以便它應該出現在任何地方。
結合捕獲事件,這甚至可能會將拖動光標擴展到頁面和瀏覽器窗口之外。 setCapture
在Firefox中可靠地執行此操作。但在其他地方,它並不是每次都有效,這取決於瀏覽器,UI佈局以及鼠標光標離開窗口的路徑。 ;-)
當你完成,清理:
element.releaseCapture && element.releaseCapture();
$("html").removeClass("reset-all-cursors");
document.documentElement.style.setProperty("cursor", "");
這包括jQuery的用於addClass
和removeClass
。在簡單情況下,您可以簡單地比較並設置document.documentElement
的class
屬性。儘管如此,這將破壞像Modernizr這樣的其他圖書館。如果您已經知道該元素所需的光標,則可以刪除css
函數,或嘗試諸如element.style.cursor
之類的操作。
setCapture可以在IE和FF/Moz中使用,但是Chrome並不支持這個超棒的功能:( – eselk
setCapture現在只能在Firefox中使用(不在IE 11中),但是它可以在它出現時使用 – ygoe