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


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

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.


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


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

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


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

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.


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


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


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

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

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.