これは私が何をすべきかであり、それはあなたのページにこのCSSルールを追加2017年
のようFirefoxの、クロム、エッジとIEで動作します:
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にすぎませんが、Microsoft APIだと言われています。その後、特殊クラスがドキュメント全体に追加され、すべてのカスタムカーソルが無効になります。最後に、ドキュメント上のカーソルをどこにでも表示するように設定します。
キャプチャイベントと組み合わせて、ドラッグカーソルをページおよびブラウザウィンドウの外側に拡張することさえできます。 setCapture
はこれをFirefoxで確実に行います。しかし、ブラウザ、UIのレイアウト、およびマウスカーソルがウィンドウを離れる経路に依存して、毎回動作しません。 ;-)
完了したら、クリーンアップ:
element.releaseCapture && element.releaseCapture();
$("html").removeClass("reset-all-cursors");
document.documentElement.style.setProperty("cursor", "");
これはaddClass
とremoveClass
のためのjQueryを含んでいます。単純なシナリオでは、class
の属性をdocument.documentElement
と単純に比較して設定できます。これは、Modernizrのような他のライブラリを破るでしょう。要素の希望のカーソルが既にわかっている場合はcss
関数を取り除くか、element.style.cursor
のようなものを試してみてください。
setCaptureはIEとFF/Mozで動作しますが、Chromeはこの素晴らしい機能をサポートしていません:( – eselk
setCaptureは今日のFirefox(Internet Explorer 11ではなく)でのみ動作しますが、それが存在するときに使用できます – ygoe