Mengubah kursor menjadi menunggu di javascript / jquery

120

masukkan deskripsi gambar di sini

Bagaimana saya mendapatkan kursor saya untuk mengubah ikon pemuatan ini ketika sebuah fungsi dipanggil dan bagaimana saya mengubahnya kembali ke kursor normal di javascript / jquery

ahmet
sumber
7
jika Anda menginginkan kursor ini secara tepat, Anda perlu menentukan url, jika tidak (dengan solusi Roberts) setiap pengguna akan melihat kursor pemuatan tergantung pada OS-nya.
Christoph
1
Christoph, apa yang akan 'menunggu' muncul untuk sistem operasi lain Saya saat ini menggunakan windows 7, karena saat ini terlihat baik
ahmet
2
nah, di vista itu akan menampilkan kursor yang sama seperti di windows 7, tapi dengan animasi rusak itu, pada OS Windows yang lebih lama itu akan menampilkan jam pasir yang bagus dan di Linux atau Mac OS itu akan menampilkan kursor "menunggu" masing-masing. Juga saya sarankan untuk tidak memanipulasi kursor pengguna, karena ini biasanya terkait dengan Operasi-OS, melainkan memberikan sedikit animasi tunggu seperti ini langsung di halaman web Anda, yang membantu pengguna untuk melihat sekilas, bahwa operasi menunggu disebabkan oleh situs Anda, bukan OS.
Christoph
1
lihat juga stackoverflow.com/questions/192900/…
Brian Burns
1
Ide bagus untuk desktop, ide BURUK untuk seluler ...
Please_Dont_Bully_Me_SO_Lords

Jawaban:

195

Dalam penggunaan jQuery Anda:

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

lalu kembali normal lagi

$("body").css("cursor", "default");
Robert Stanley
sumber
8
Saya menggunakan $("html,body")karena badan halaman saya hanya muat setengah dari jendela sehingga kursor masih default saat mengarahkan kursor ke bagian bawah.
Keith
Elemen lain pada halaman (yaitu tombol Bootstrap) yang menimpa kursor ke tampilan non-default akan memblokir pendekatan ini saat kursor masih di atas elemen. Dalam kasus tersebut, saya merasa lebih baik menggunakan !importantsolusi @ hrabinowitz di bawah ini
Addison Klinke
82

Seorang kolega menyarankan pendekatan yang menurut saya lebih disukai daripada solusi yang dipilih di sini. Pertama, di CSS, tambahkan aturan ini:

body.waiting * {
    cursor: progress;
}

Kemudian, untuk mengaktifkan kursor kemajuan, ucapkan:

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

dan untuk mematikan kursor kemajuan, ucapkan:

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

Keuntungan dari pendekatan ini adalah ketika Anda mematikan kursor kemajuan, kursor lain apa pun yang telah ditentukan di CSS Anda akan dipulihkan. Jika aturan CSS tidak cukup kuat untuk mengesampingkan aturan CSS lainnya, Anda dapat menambahkan id ke badan dan ke aturan, atau gunakan !important.

hrabinowitz
sumber
Solusi luar biasa!
Kenton de Jong
31

Tolong jangan gunakan jQuery untuk ini di 2018! Tidak ada alasan untuk menyertakan seluruh pustaka eksternal hanya untuk melakukan satu tindakan ini yang dapat dicapai dengan satu baris:

Ubah kursor menjadi spinner: document.body.style.cursor = 'wait';

Kembalikan kursor ke normal: document.body.style.cursor = 'default';

kchuang7
sumber
3
Kemungkinan besar ada sesuatu di halaman itu yang menambahkan kebutuhan akan kursor pemrosesan kustom, bukan? Bukan poin yang buruk tentu saja, tetapi perubahan jQuery yang sudah dimuat untuk sesuatu yang lain akan ... ehm ... 100%?
patrick
Karena @ahmet meminta solusi javascript / jquery, saya pikir milik Anda juga harus menjadi jawabannya. +1
Javier
8

Berikut ini adalah cara yang saya pilih, dan akan mengubah kursor setiap kali halaman akan berubah yaitu beforeunload

$(window).on('beforeunload', function(){
   $('*').css("cursor", "progress");
});
shaneparsons
sumber
1
Sejauh ini, ini adalah implementasi termudah dan paling sederhana yang dapat Anda lakukan. Terima kasih banyak.
JC203
7

Menggunakan jquery dan css:

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

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

CSS: .wait {cursor:wait}​

Demo di sini

tusar
sumber
Ini menunjukkan bahwa kursor tunggu dapat ditampilkan di atas penampung yang kurang dari keseluruhan halaman - mungkin masuk akal jika bagian lain dari halaman masih dapat berinteraksi dengannya. Di sini, hanya saat Anda mengarahkan kursor ke div. Dalam praktiknya, item yang dipilih untuk menampilkan kursor tunggu harus lebih besar dari item yang diklik. Seringkali, yang terbaik untuk ditampilkan di seluruh halaman, seperti pada jawaban yang diterima.
ToolmakerSteve
6

Timpa semua elemen tunggal

$("*").css("cursor", "progress");
สุด เขต นะ จ๊ะ
sumber
6
Masalah dengan pendekatan ini adalah Anda akan kehilangan gaya CSS untuk penyeleksi seperti: active /: hover, setelah penantian selesai
Ahmad
6
$('#some_id').click(function() {
  $("body").css("cursor", "progress");
  $.ajax({
    url: "test.html",
    context: document.body,
    success: function() {
      $("body").css("cursor", "default");
    }
  });
});

Ini akan membuat kursor pemuatan sampai panggilan ajax Anda berhasil.

Kanishka Panamaldeniya
sumber
1
@Christoph, tolong beri kami jawaban dengan kode yang lebih baik? Saya pasti lebih suka kode yang lebih baik selalu.
Bobort
@Bobort pertanyaan ini sudah memiliki banyak jawaban yang layak. Juga sudah 4 tahun dan sementara itu successdan completedihapus di jQ3, jadi Anda harus pergi dengan $.ajax(...).always(...);Kursor progess dapat diatur dalam beforeSendfungsinya.
Christoph
6

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

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

Murni:
document.body.style.cursor = 'progress';

kembali lagi
document.body.style.cursor = 'default';

xoxn-- 1'w3k4n
sumber
5

Anda tidak membutuhkan JavaScript untuk ini. Anda dapat mengubah kursor menjadi apa pun yang Anda inginkan menggunakan CSS:

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

Lihat di sini untuk dukungan browser karena ada beberapa perbedaan kecil bergantung pada browser

Pastori
sumber
1
Apakah Anda tidak memerlukan javascript untuk memicu perubahan ke kursor lain?
ToolmakerSteve
@ToolmakerSteve tidak - Anda hanya dapat menggunakan CSS - cukup ubah selektor untuk menentukan di mana Anda ingin kursor digunakan
Manse
3

Berikut hal menarik lainnya yang bisa Anda lakukan. Tentukan fungsi yang akan dipanggil sebelum setiap panggilan ajax. Juga tetapkan fungsi untuk dipanggil setelah setiap panggilan ajax selesai. Fungsi pertama akan mengatur kursor tunggu dan fungsi kedua akan menghapusnya. Mereka terlihat seperti berikut:

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

function waitCursor() {
    $('*').css('cursor', 'progress');
  }
Shawn Vincent
sumber
1

Jika menyimpan terlalu cepat, coba ini:

<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");
Mark Eilenberger
sumber
1

Menyetel kursor untuk 'body' akan mengubah kursor untuk latar belakang halaman tetapi tidak untuk kontrol di atasnya. Misalnya, tombol akan tetap memiliki kursor biasa saat diarahkan ke atasnya. Berikut ini yang saya gunakan:

Untuk menyetel kursor 'tunggu', buat elemen gaya dan masukkan di kepala:

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);

Kemudian untuk memulihkan kursor, hapus elemen gaya:

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

Saya menemukan bahwa satu-satunya cara agar kursor menyetel ulang gayanya secara efektif kembali ke gaya sebelum diubah ke gaya tunggu adalah dengan menyetel gaya asli di lembar gaya atau di tag gaya di awal halaman, setel kelas objek yang dimaksud dengan nama gaya. Kemudian setelah masa tunggu, Anda menyetel gaya kursor kembali ke string kosong, BUKAN "default" dan kembali ke nilai aslinya seperti yang ditetapkan di tag gaya atau lembar gaya Anda. Menyetelnya ke "default" setelah masa tunggu hanya mengubah gaya kursor untuk setiap elemen ke gaya yang disebut "default" yang merupakan penunjuk. Itu tidak mengubahnya kembali ke nilai semula.

Ada dua syarat untuk membuat ini berhasil. Pertama Anda harus mengatur gaya di lembar gaya atau di header halaman dengan tag gaya, BUKAN sebagai gaya sebaris dan kedua adalah menyetel ulang gayanya dengan menyetel gaya tunggu kembali ke string kosong.

David Crawford
sumber