javascript / jqueryでカーソルを待機に変更する


119

ここに画像の説明を入力してください

関数が呼び出されたときにカーソルをこの読み込みアイコンに変更するにはどうすればよいですか、またjavascript / jqueryで通常のカーソルに戻すにはどうすればよいですか


7
正確にこのカーソルが必要な場合は、URLを指定する必要があります。それ以外の場合(Robertsソリューションを使用)、OSに応じて、すべてのユーザーにローディングカーソルが表示されます。
Christoph

1
クリストフ、現在Windows 7を使用している他のオペレーティングシステムで何が表示されるかを示します。現時点では問題ないためです
ahmet

2
まあ、ビスタではウィンドウ7と同じカーソルが表示されますが、アニメーションが壊れているため、古いWindows OSでは古き良き砂時計が表示され、LinuxまたはMac OSではそれぞれの「待機中」カーソルが表示されました。また、ユーザーカーソルを操作しないことをお勧めします。これは一般にOS-Operationsに関連付けられているためですが、Webページに直接これらのような待機アニメーションを提供して、ユーザーが一目で待機操作を確認できるようにしますOSではなくサイトが原因です。
Christoph


1
デスクトップにはいいアイデア、モバイルには悪いアイデア...
Please_Dont_Bully_Me_SO_Lords

回答:


195

あなたのjQueryで使用:

$("body").css("cursor", "progress");

その後、通常に戻ります

$("body").css("cursor", "default");

8
私が使用し$("html,body")たのは、ページの本体がウィンドウの半分にしか収まらないため、下半分にカーソルを合わせるとカーソルがデフォルトのままだったからです。
キース

カーソルをデフォルト以外の表示にオーバーライドするページ上の他の要素(つまり、ブートストラップボタン)は、カーソルがまだ要素上にあるときにこのアプローチをブロックします。それらの場合、私は!important以下の@hrabinowitzのソリューションで使用する方が好ましいとわかりました
Addison Klinke

82

同僚は、ここで選択したソリューションよりも好ましいと思うアプローチを提案しました。まず、CSSで次のルールを追加します。

body.waiting * {
    cursor: progress;
}

次に、進行カーソルをオンにするには、次のように言います。

$('body').addClass('waiting');

プログレスカーソルをオフにするには、次のように言います。

$('body').removeClass('waiting');

このアプローチの利点は、進捗カーソルをオフにすると、CSSで定義されていた他のカーソルが復元されることです。CSSルールの優先度が他のCSSルールを無効にするほど強力でない場合は、本文とルールにIDを追加するか、を使用できます!important


優れたソリューション!
ケントンデジョン

31

2018年は、jQueryを使用しないでください。1行で実行できるこの1つのアクションを実行するためだけに外部ライブラリ全体を含める理由はありません。

カーソルをスピナーに変更します。 document.body.style.cursor = 'wait';

カーソルを通常に戻す: document.body.style.cursor = 'default';


3
おそらく、そのページにカスタム処理カーソルの必要性を追加する何かがあると思いませんか?もちろん悪い点ではありませんが、jQueryがすでに何か他のもののためにロードされている変更は...えーと... 100%?
パトリック2018

@ahmetがjavascript / jqueryソリューションを要求するので、私もあなたの答えが必要です。+1
ハビエル

8

以下は私の好ましい方法であり、ページが変更されるたびにカーソルを変更します beforeunload

$(window).on('beforeunload', function(){
   $('*').css("cursor", "progress");
});

1
これは、実行することができる最も簡単で単純な実装です。どうもありがとう。
JC203 2016

7

jqueryとcssの使用:

$("#element").click(function(){ 
    $(this).addClass("wait");
});​

HTML: <div id="element">Click and wait</div>​

CSS: .wait {cursor:wait}​

デモはこちら


これは、ページ全体よりも小さいコンテナの上に待機カーソルを表示できることを示しています。ページの他の部分が引き続き操作できる場合は、意味があるかもしれません。ここでは、にカーソルを合わせてdivいる間のみです。実際には、待機カーソルを表示するために選択したアイテムは、クリックしたアイテムよりも大きくする必要があります。多くの場合、受け入れられた回答のように、ページ全体に表示するのが最善です。
ToolmakerSteve

6

すべての単一要素を上書き

$("*").css("cursor", "progress");

6
このアプローチの問題は、待機が終了すると、:active /:hoverのようなセレクターのCSSスタイルが失われることです
Ahmad

6
$('#some_id').click(function() {
  $("body").css("cursor", "progress");
  $.ajax({
    url: "test.html",
    context: document.body,
    success: function() {
      $("body").css("cursor", "default");
    }
  });
});

これにより、ajax呼び出しが成功するまで読み込みカーソルが作成されます。


1
@クリストフ、もっと良いコードで答えてくれませんか?私は間違いなく常により良いコードを好みます。
Bobort 2017年

@Bobortこの質問にはすでにかなりの回答がたくさんあります。また、それは一方で4歳ですsuccessし、completeあなたが行かなければならないので、jQ3で除去される$.ajax(...).always(...);カーソルを設定することができprogess beforeSend機能。
Christoph

6

jQuery:
$("body").css("cursor", "progress");

再び
$("body").css("cursor", "default");

ピュア:
document.body.style.cursor = 'progress';

再び
document.body.style.cursor = 'default';


5

これにはJavaScriptは必要ありません。CSSを使用して、カーソルを好きなように変更できます。

selector {
    cursor: url(myimage.jpg), auto;
}

ブラウザによって微妙な違いがあるため、ブラウザのサポートについてはこちらをご覧ください


1
別のカーソルへの変更をトリガーするためにJavaScriptは必要ありませんか?
ToolmakerSteve

@ToolmakerSteve nope-CSSのみを使用できます-セレクターを変更して、カーソルを使用する場所を定義します
Manse

3

ここにあなたができる他の面白いものがあります。各ajax呼び出しの直前に呼び出す関数を定義します。また、各ajax呼び出しが完了した後に呼び出す関数を割り当てます。最初の関数は待機カーソルを設定し、2番目の関数はそれをクリアします。それらは次のようになります。

$(document).ajaxComplete(function(event, request, settings) {
    $('*').css('cursor', 'default');
  });

function waitCursor() {
    $('*').css('cursor', 'progress');
  }

1

保存が速すぎる場合は、これを試してください:

<style media="screen" type="text/css">
    .autosave {display: inline; padding: 0 10px; color:green; font-weight: 400; font-style: italic;}
</style>

<input type="button" value="Save" onclick="save();" />&nbsp;
<span class="autosave" style="display: none;">Saved Successfully</span>


$('span.autosave').fadeIn("80");
$('span.autosave').delay("400");
$('span.autosave').fadeOut("80");

1

カーソルを 'body'に設定すると、ページの背景のカーソルは変更されますが、ページのコントロールは変更されません。たとえば、ボタンにカーソルを合わせると、通常のカーソルが表示されます。以下は私が使用しているものです:

「待機」カーソルを設定するには、スタイル要素を作成し、ヘッドに挿入します。

var css = "* { cursor: wait; !important}";
var style = document.createElement("style");
style.type = "text/css";
style.id = "mywaitcursorstyle";
style.appendChild(document.createTextNode(css));
document.head.appendChild(style);

次に、カーソルを復元するには、style要素を削除します。

var style = document.getElementById("mywaitcursorstyle");
if (style) {
  style.parentNode.removeChild(style);
}

0

待機スタイルに変更される前の状態にカーソルを効果的にリセットする唯一の方法は、ページの最初にあるスタイルシートまたはスタイルタグに元のスタイルを設定することでした。問題のオブジェクトのクラスとスタイルの名前。次に、待機時間の後、カーソルスタイルを「デフォルト」ではなく空の文字列に戻し、スタイルタグまたはスタイルシートで設定された元の値に戻します。待機期間の後で「デフォルト」に設定すると、すべての要素のカーソルスタイルが、ポインタである「デフォルト」と呼ばれるスタイルに変更されるだけです。元の値に戻すことはありません。

これを機能させるには2つの条件があります。最初に、インラインスタイルとしてではなく、スタイルシートまたはスタイルタグを使用してページのヘッダーにスタイルを設定する必要があります。次に、待機スタイルを空の文字列に設定してスタイルをリセットします。

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