Ändern des Cursors auf Warten in Javascript / JQuery

118

Geben Sie hier die Bildbeschreibung ein

Wie würde ich meinen Cursor dazu bringen, auf dieses Ladesymbol zu wechseln, wenn eine Funktion aufgerufen wird, und wie würde ich ihn wieder in einen normalen Cursor in Javascript / jquery ändern

ahmet
quelle
7
Wenn Sie genau diesen Cursor möchten, müssen Sie eine URL angeben. Andernfalls wird (mit Roberts-Lösung) jeder Benutzer den Ladecursor abhängig von seinem Betriebssystem sehen.
Christoph
1
Christoph, was würde "warten" zeigen für andere Betriebssysteme Ich bin derzeit auf Windows 7, weil im Moment es gut aussieht
ahmet
2
Nun, in Vista würde es den gleichen Cursor wie in Windows 7 zeigen, aber mit seiner kaputten Animation würde es unter älteren Windows-Betriebssystemen die gute alte Sanduhr zeigen und unter Linux oder Mac OS würde es ihren jeweiligen "wartenden" Cursor zeigen. Außerdem würde ich vorschlagen, den Benutzercursor nicht zu manipulieren, da dies üblicherweise mit Betriebssystemoperationen verbunden ist, sondern eine kleine Warteanimation wie diese direkt auf Ihrer Webseite bereitzustellen , damit der Benutzer auf den ersten Blick erkennen kann, dass der Wartevorgang ausgeführt wird wird von Ihrer Site und nicht vom Betriebssystem verursacht.
Christoph
1
Siehe auch stackoverflow.com/questions/192900/…
Brian Burns
1
Gute Idee für Desktop, schlechte Idee für Handy ...
Please_Dont_Bully_Me_SO_Lords

Antworten:

195

Verwenden Sie in Ihrer jQuery:

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

und dann wieder normal

$("body").css("cursor", "default");
Robert Stanley
quelle
8
Ich habe verwendet, $("html,body")weil der Körper meiner Seite nur zur Hälfte des Fensters passt, sodass der Cursor beim Bewegen des Mauszeigers über die untere Hälfte immer noch standardmäßig war.
Keith
80

Ein Kollege schlug einen Ansatz vor, den ich hier der gewählten Lösung vorzuziehen finde. Fügen Sie zunächst in CSS die folgende Regel hinzu:

body.waiting * {
    cursor: progress;
}

Um den Fortschrittscursor einzuschalten, sagen Sie:

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

und um den Fortschrittscursor auszuschalten, sagen Sie:

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

Der Vorteil dieses Ansatzes besteht darin, dass beim Ausschalten des Fortschrittscursors alle anderen in Ihrem CSS definierten Cursor wiederhergestellt werden. Wenn die CSS-Regel nicht leistungsfähig genug ist, um andere CSS-Regeln zu überschreiben, können Sie dem Textkörper und der Regel eine ID hinzufügen oder verwenden !important.

hrabinowitz
quelle
Hervorragende Lösung!
Kenton de Jong vor
31

Bitte verwenden Sie dafür 2018 nicht jQuery! Es gibt keinen Grund, eine gesamte externe Bibliothek einzuschließen, um nur diese eine Aktion auszuführen, die mit einer Zeile ausgeführt werden kann:

Ändern Sie den Cursor auf Spinner: document.body.style.cursor = 'wait';

Cursor auf normal zurücksetzen: document.body.style.cursor = 'default';

kchuang7
quelle
3
Höchstwahrscheinlich gibt es auf dieser Seite etwas, das die Notwendigkeit eines benutzerdefinierten Verarbeitungscursors hinzufügt, oder? Natürlich kein schlechter Punkt, aber die Änderung von jQuery, die bereits für etwas anderes geladen wird, wäre ... ähm ... 100%?
Patrick
Da @ahmet nach einer Javascript / JQuery-Lösung fragt, denke ich, dass Ihre auch die Antwort sein sollte. +1
Javier
8

Das Folgende ist meine bevorzugte Methode und ändert den Cursor jedes Mal, wenn sich eine Seite ändert, z beforeunload

$(window).on('beforeunload', function(){
   $('*').css("cursor", "progress");
});
shaneparsons
quelle
1
Dies ist bei weitem die einfachste und einfachste Implementierung, die Sie durchführen können. Vielen Dank.
JC203
7

Verwenden von jquery und css:

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

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

CSS: .wait {cursor:wait}​

Demo hier

Tusar
quelle
Dies zeigt, dass der Wartecursor über einem Container angezeigt werden kann, der kleiner als die gesamte Seite ist. Dies kann sinnvoll sein, wenn andere Teile der Seite noch interagieren können. Hier schwebte nur über dem div. In der Praxis sollte das ausgewählte Element zum Anzeigen des Wartecursors größer sein als das angeklickte Element. Oft ist es am besten, auf der ganzen Seite zu zeigen, wie in der akzeptierten Antwort.
ToolmakerSteve
6

Alle einzelnen Elemente überschreiben

$("*").css("cursor", "progress");
สุด เขต นะ จ๊ะ
quelle
6
Das Problem bei diesem Ansatz ist, dass Sie den CSS-Stil für Selektoren wie: active /: hover verlieren würden, sobald das Warten vorbei ist
Ahmad
6
$('#some_id').click(function() {
  $("body").css("cursor", "progress");
  $.ajax({
    url: "test.html",
    context: document.body,
    success: function() {
      $("body").css("cursor", "default");
    }
  });
});

Dadurch wird ein Ladecursor erstellt, bis Ihr Ajax-Aufruf erfolgreich ist.

Kanishka Panamaldeniya
quelle
1
@Christoph, warum geben Sie uns bitte keine Antwort mit dem besseren Code? Ich würde definitiv immer besseren Code bevorzugen.
Bobort
@Bobort diese Frage hat schon viele anständige Antworten. Auch ist es die 4 Jahre alt und in der Zwischenzeit successund completesind in jQ3 entfernt, so dass Sie mit gehen $.ajax(...).always(...);Der progess Cursor könnte in der eingestellt werden beforeSendFunktion.
Christoph
6

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

wieder zurück
$("body").css("cursor", "default");

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

wieder zurück
document.body.style.cursor = 'default';

xoxn-- 1'w3k4n
quelle
5

Sie benötigen dafür kein JavaScript. Sie können den Cursor mithilfe von CSS auf alles ändern, was Sie möchten:

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

Informationen zur Browserunterstützung finden Sie hier , da es je nach Browser einige geringfügige Unterschiede gibt

Pfarrhaus
quelle
1
Benötigen Sie kein Javascript, um die Änderung an einem anderen Cursor auszulösen?
ToolmakerSteve
@ToolmakerSteve nein - Sie können nur CSS verwenden - ändern Sie einfach den Selektor, um zu definieren, wo der Cursor verwendet werden soll
Manse
3

Hier ist noch etwas Interessantes, das Sie tun können. Definieren Sie eine Funktion, die unmittelbar vor jedem Ajax-Aufruf aufgerufen werden soll. Weisen Sie auch eine Funktion zu, die nach jedem Ajax-Aufruf aufgerufen werden soll. Die erste Funktion setzt den Wartecursor und die zweite löscht ihn. Sie sehen wie folgt aus:

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

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

Wenn es zu schnell spart, versuchen Sie Folgendes:

<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
quelle
1

Wenn Sie den Cursor auf "body" setzen, wird der Cursor für den Hintergrund der Seite geändert, nicht jedoch für die Steuerelemente. Beispielsweise haben Schaltflächen beim Bewegen des Mauszeigers weiterhin den normalen Cursor. Folgendes verwende ich:

Um den Wartecursor zu setzen, erstellen Sie ein Stilelement und fügen Sie es in den Kopf ein:

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

Löschen Sie dann das Stilelement, um den Cursor wiederherzustellen:

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

Ich fand heraus, dass die einzige Möglichkeit, den Cursor dazu zu bringen, seinen Stil effektiv auf das zurückzusetzen, was er vor dem Ändern des Wartestils hatte, darin bestand, den ursprünglichen Stil in einem Stylesheet oder in Stil-Tags am Anfang der Seite festzulegen die Klasse des betreffenden Objekts zum Namen des Stils. Nach Ihrer Wartezeit setzen Sie den Cursor-Stil auf eine leere Zeichenfolge zurück, NICHT auf "Standard", und er wird auf den ursprünglichen Wert zurückgesetzt, der in Ihren Style-Tags oder im Stylesheet festgelegt wurde. Wenn Sie es nach der Wartezeit auf "Standard" setzen, wird nur der Cursorstil für jedes Element in den Stil "Standard" geändert, bei dem es sich um einen Zeiger handelt. Es ändert es nicht zurück zu seinem früheren Wert.

Es gibt zwei Bedingungen, damit dies funktioniert. Erstens müssen Sie den Stil in einem Stylesheet oder in der Kopfzeile der Seite mit Stil-Tags festlegen, NICHT als Inline-Stil, und zweitens müssen Sie seinen Stil zurücksetzen, indem Sie den Wartestil auf eine leere Zeichenfolge zurücksetzen.

David Crawford
quelle