İmleci javascript / jquery'de bekleme olarak değiştirme


120

görüntü açıklamasını buraya girin

Bir işlev çağrıldığında imlecimin bu yükleme simgesine nasıl değişmesini sağlayabilirim ve javascript / jquery'de onu normal bir imlece nasıl değiştirebilirim


7
tam olarak bu imleci istiyorsanız, bir url belirtmeniz gerekir, aksi takdirde (Roberts çözümü ile) her kullanıcı işletim sistemine bağlı olarak yükleme imlecini görecektir.
Christoph

1
Christoph, diğer işletim sistemleri için ne 'bekleyecektim' şu anda 7 penceresindeyim, çünkü şu anda iyi görünüyor
ahmet

2
vista, Windows 7'deki ile aynı imleci gösterecekti, ancak bozuk animasyonu ile eski Windows işletim sisteminde iyi kum saatini gösterecek ve Linux veya Mac OS'de kendi "bekleme" imlecini gösterecekti. Ayrıca, bu genellikle İşletim Sistemi İşlemleri ile ilişkilendirildiğinden, kullanıcı imlecini değiştirmemenizi öneririm, bunun yerine doğrudan web sayfanızda bunlar gibi küçük bir bekleme animasyonu sağlayın, bu da kullanıcının ilk bakışta bekleme işlemini görmesine yardımcı olur. işletim sisteminizden değil sitenizden kaynaklanır.
Christoph


1
Masaüstü için iyi fikir, mobil için KÖTÜ fikir ...
Please_Dont_Bully_Me_SO_Lords

Yanıtlar:


196

JQuery kullanımınızda:

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

ve sonra tekrar normale döner

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

8
Kullandığım $("html,body")alt yarısı üzerine gelindiğinde pencerenin sayfamı cesedi, uyum yarım imleç hala varsayılan bu yüzden çünkü.
Keith

İmleci varsayılan olmayan bir görüntüye geçersiz kılan sayfadaki diğer öğeler (örn. Önyükleme düğmeleri), imleç öğenin üzerindeyken bu yaklaşımı engelleyecektir. Bu durumlarda, !important@ hrabinowitz'in aşağıdaki çözümüyle birlikte kullanmayı tercih ettim
Addison Klinke

83

Bir meslektaşım, burada seçilen çözüme göre tercih edilebilir bulduğum bir yaklaşım önerdi. Öncelikle, CSS'de şu kuralı ekleyin:

body.waiting * {
    cursor: progress;
}

Ardından, ilerleme imlecini açmak için şunu söyleyin:

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

ve ilerleme imlecini kapatmak için şunu söyleyin:

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

Bu yaklaşımın avantajı, ilerleme imlecini kapattığınızda, CSS'nizde tanımlanmış olabilecek diğer imleçler geri yüklenecektir. CSS kuralı diğer CSS kurallarını geçersiz kılacak kadar önceliğe sahip değilse, gövdeye ve kurala bir kimlik ekleyebilir veya kullanabilirsiniz !important.


Mükemmel çözüm!
Kenton de Jong

31

Lütfen bunun için 2018'de jQuery kullanmayın! Yalnızca tek satırla gerçekleştirilebilecek bu eylemi gerçekleştirmek için tüm bir dış kitaplığı dahil etmenin bir nedeni yoktur:

İmleci dönen olarak değiştirin: document.body.style.cursor = 'wait';

İmleci normale döndür: document.body.style.cursor = 'default';


3
Muhtemelen o sayfada özel bir işleme imlecine ihtiyaç duyan bir şey var, değil mi? Elbette kötü bir nokta değil, ancak jQuery'nin başka bir şey için zaten yüklenmekte olan değişikliği ... ehm ...% 100?
patrick

@Ahmet javascript / jquery çözümünü sorduğu için, bence cevap sizinki de olmalı. +1
Javier

8

Aşağıdakiler benim tercih ettiğim yoldur ve bir sayfa her değişmek üzereyken imleci değiştirecektir. beforeunload

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

1
bu, yapabileceğiniz en kolay ve en basit uygulamadır. Çok teşekkürler.
JC203

Onu geri almanın yolu yok!
Ωmega

7

Jquery ve css kullanarak:

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

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

CSS: .wait {cursor:wait}​

Demo burada


Bu, bekleme imlecinin tüm sayfadan daha küçük bir kap üzerinde gösterilebileceğini gösterir - sayfanın diğer bölümleriyle hala etkileşim kurulabiliyorsa mantıklı olabilir. Burada, yalnızca div. Pratikte, bekleme imlecini gösterecek seçilen öğe tıklanan öğeden daha büyük olmalıdır. Genellikle, kabul edilen yanıtta olduğu gibi tüm sayfada gösterilmesi en iyisidir.
ToolmakerSteve

6

Tüm tek öğeleri geçersiz kıl

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

6
Bu yaklaşımla ilgili sorun, şu gibi seçiciler için CSS stilini kaybedeceğinizdir: active /: hover, bekleme sona erdiğinde
Ahmad

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

Bu, ajax çağrınız başarılı olana kadar bir yükleme imleci oluşturacaktır.


1
@Christoph, neden bize daha iyi kodla bir cevap vermiyorsun, lütfen? Her zaman daha iyi kodu kesinlikle tercih ederim.
Bobort

@Bobort bu sorunun zaten birçok iyi cevabı var. Ayrıca 4 yaşında ve bu arada olduğunu successve completesen gitmek zorunda, jQ3 içinde kaldırılır $.ajax(...).always(...);progess imleç içinde kurulabileceği beforeSendfonksiyonu.
Christoph

6

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

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

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

tekrar
document.body.style.cursor = 'default';


5

Bunun için JavaScript'e ihtiyacınız yok. İmleci CSS kullanarak istediğiniz herhangi bir şeye değiştirebilirsiniz:

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

Tarayıcıya bağlı olarak bazı küçük farklılıklar olduğundan tarayıcı desteği için buraya bakın


1
Değişikliği farklı bir imleçle tetiklemek için javascript'e ihtiyacınız yok mu?
ToolmakerSteve

@ToolmakerSteve hayır - yalnızca CSS'yi kullanabilirsiniz - imlecin nerede kullanılmasını istediğinizi tanımlamak için seçiciyi değiştirmeniz yeterlidir
Manse

3

İşte yapabileceğiniz başka ilginç bir şey. Her ajax çağrısından hemen önce çağrılacak bir işlev tanımlayın. Ayrıca, her ajax çağrısı tamamlandıktan sonra çağrılacak bir işlev atayın. İlk işlev bekleme imlecini ayarlayacak ve ikincisi onu temizleyecektir. Aşağıdakine benziyorlar:

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

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

1

Çok hızlı kaydederse, şunu deneyin:

<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

İmleci 'gövde' olarak ayarlamak, imleci sayfanın arka planı için değiştirir ancak üzerindeki kontroller için değiştirmez. Örneğin, düğmelerin üzerine gelindiğinde normal imleç yine de olacaktır. Aşağıdakiler kullanıyorum:

'Bekle' imlecini ayarlamak için, bir stil öğesi oluşturun ve başlığa ekleyin:

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

Ardından imleci geri yüklemek için stil öğesini silin:

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

0

İmlecin stilini bekleme stiline değiştirilmeden önceki haline etkili bir şekilde sıfırlamasının tek yolunun, orijinal stili bir stil sayfasında veya sayfanın başlangıcındaki stil etiketlerinde ayarlamak olduğunu buldum. söz konusu nesnenin sınıfı stilin adına. Sonra bekleme sürenizden sonra, imleç stilini "varsayılan" DEĞİL, boş bir dizeye ayarlarsınız ve stil etiketlerinizde veya stil sayfanızda ayarlandığı şekliyle orijinal değerine geri döner. Bekleme süresinden sonra "varsayılan" olarak ayarlamak, yalnızca her öğe için imleç stilini bir işaretçi olan "varsayılan" olarak adlandırılan stile değiştirir. Onu eski değerine geri döndürmez.

Bunun işe yaraması için iki koşul var. İlk önce stili bir satır içi stil olarak DEĞİL, stil etiketleriyle birlikte bir stil sayfasında veya sayfanın başlığında ayarlamalısınız ve ikincisi bekleme stilini boş bir dizeye ayarlayarak stilini sıfırlamaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.