CSSまたはJavaScriptを使用してWebページのカーソルを非表示にすることはできますか?


129

建物のホールに情報を表示するためのWebページを表示するときにカーソルを非表示にしたい。インタラクティブである必要はまったくありません。カーソルプロパティと透明なカーソルイメージを試しましたが、機能しませんでした。

これができるかどうか誰かが知っていますか?これは、ユーザーがどこをクリックしているのかわからないセキュリティ上の脅威と考えられるため、あまり楽観的ではありません...ありがとうございます。

回答:


202

CSSを使用する場合:

selector { cursor: none; }

例:

<div class="nocursor">
   Some stuff
</div>
<style type="text/css">
    .nocursor { cursor:none; }
</style>

これをJavaScriptの要素に設定するには、次のstyleプロパティを使用できます。

<div id="nocursor"><!-- some stuff --></div>
<script type="text/javascript">
    document.getElementById('nocursor').style.cursor = 'none';
</script>

これを全身に設定したい場合:

<script type="text/javascript">
    document.body.style.cursor = 'none';
</script>

ただし、カーソルを本当に非表示にしたいことを確認してください。それは本当に人々を困らせることができます


それは完璧に働きました!奇妙なことに、私はW3C仕様(w3.org/TR/CSS2/ui.html)をスヌープしましたが、彼らはそれについて何も述べていませんでした。ありがとう!
yeyeyerman 2009

10
むしろW3!World World Wide Web。
ルーカスジョーンズ

4
CSS3をサポートしていないブラウザーを気にする方法:1x1px透明pngまたは1%透明pngを使用します。
デレク━會功夫

1
私の知る限りでは、IE6は透明なPNGをサポートしていますが、これは実際の透明度であり、アルファチャネルの透明度ではありません。疑わしい場合は、テストスイートlibpng.org/pub/png/pngsuite.htmlを確認してください。
Shi

3
@MatthiasHerrmann:試してくださいdocument.body.style.cursor = 'auto'
Lucas Jones

30

ポインターロックAPI

一方でcursor: noneCSSのソリューションは間違いなく固体と簡単です回避策実際の目標は、のであれば、削除 Webアプリケーションが使用されている間に、デフォルトのカーソルを、またはあなたの実装自身(例えばFPSゲームのため、)生のマウスの動きの解釈を、あなたがかもしれません代わりにPointer Lock APIの使用を検討したい。

要素でrequestPointerLockを使用してカーソルを削除し、すべてのmousemoveイベントをその要素にリダイレクトできます(処理する場合としない場合があります)。

document.body.requestPointerLock();

ロックを解除するには、exitPointerLockを使用できます。

document.exitPointerLock();

その他の注意事項

実際にはカーソルなし

これは非常に強力なAPI呼び出しです。カーソルを非表示にするだけでなく、実際にはオペレーティングシステムのネイティブカーソルを削除します。ポインタロックが解除されるまで(一部のブラウザで使用または押すことにより)、テキストを選択したり、マウスで何かをしたりすることはできません(コードの一部のマウスイベントをリッスンすることはできません)。exitPointerLockESC

つまり、カーソルがないため、ウィンドウをカーソルのままにしてウィンドウを再表示することはできません。

制限事項

上記のように、これは非常に強力なAPI呼び出しであるため、クリックなどのWeb上の直接的なユーザー操作に応答してのみ実行できます。例えば:

document.addEventListener("click", function () {
    document.body.requestPointerLock();
});

また、権限が設定されていない限り、requestPointerLockサンドボックスからは機能しません。iframeallow-pointer-lock

ユーザー通知

一部のブラウザは、ロックが掛かる前にユーザーに確認のプロンプトを表示し、一部は単にメッセージを表示します。つまり、呼び出し後すぐにポインターロックがアクティブにならない場合があります。ただし、ポインターロックの実際のアクティブ化は、呼び出さpointerchangeれた要素のイベントをリッスンすることでリッスンできますrequestPointerLock

document.body.addEventListener("pointerlockchange", function () {
    if (document.pointerLockElement === document.body) {
        // Pointer is now locked to <body>.
    }
});

ほとんどのブラウザはメッセージを1回だけ表示しますが、Firefoxは1回の呼び出しごとにメッセージをスパム送信することがあります。AFAIK、これはユーザー設定によってのみ回避できます。Firefoxでポインターロック通知無効にするを参照してください。

生のマウスの動きを聞く

Pointer Lock APIはマウスを削除するだけでなく、requestPointerLock呼び出された要素に生のマウスの動きデータをリダイレクトします。これは、mousemoveイベントを使用して、イベントオブジェクトのmovementXおよびmovementYプロパティにアクセスするだけでリッスンできます。

document.body.addEventListener("mousemove", function (e) {
    console.log("Moved by " + e.movementX + ", " + e.movementY);
});

1
これをありがとう。全画面のスライドショーに切り替えるときに、これがSPAのカーソルを追放する唯一の信頼できる方法であると私は思いました。
Velojet 2018年

1

透明な* .cur 1px〜1pxでそれを行いましたが、小さなドットのように見えます。:(それは私ができる最高のクロスブラウザのことだと思います。CSS2.1は 'cursor'プロパティの値 'none'を持っていません-それはCSS3で追加されました。


4
代わりに透明度1%の.png / .curを使用してください。
デレク━會功夫

1

CSSで実行する場合:

#ID { cursor: none !important; }

7
一般的には避けるべき!importantです。
Luca Steeb、2017

0

HTMLドキュメント全体については、これを試してください

html * {cursor:none}

または、CSSがカーソルを上書きする場合:!

html * {cursor:none!important}

0

カーソルをWebページ全体で非表示にする場合bodyは、表示されているページ全体をカバーしない限り、は機能しません。カーソルがページのどこにでも隠れていることを確認するには、以下を使用します。

document.documentElement.style.cursor = 'none';

再度有効にするには:

document.documentElement.style.cursor = 'auto';

静的なCSS表記を持つアナログは、によって答えであるパベルSalaquarda(本質的に:html * {cursor:none}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.