Ist es möglich, den Cursor auf einfache Weise auf der gesamten HTML-Seite auf "Warten" zu setzen? Die Idee ist, dem Benutzer zu zeigen, dass etwas los ist, während ein Ajax-Anruf abgeschlossen wird. Der folgende Code zeigt eine vereinfachte Version von dem, was ich versucht habe, und zeigt auch die Probleme, auf die ich stoße:
- Wenn für ein Element (# id1) ein Cursorstil festgelegt ist, wird der am Körper festgelegte ignoriert (offensichtlich).
- Einige Elemente haben einen Standardcursorstil (a) und zeigen den Wartecursor beim Hover nicht an
- Das Body-Element hat je nach Inhalt eine bestimmte Höhe. Wenn die Seite kurz ist, wird der Cursor nicht unter der Fußzeile angezeigt
Der Test:
<html>
<head>
<style type="text/css">
#id1 {
background-color: #06f;
cursor: pointer;
}
#id2 {
background-color: #f60;
}
</style>
</head>
<body>
<div id="id1">cursor: pointer</div>
<div id="id2">no cursor</div>
<a href="#" onclick="document.body.style.cursor = 'wait'; return false">Do something</a>
</body>
</html>
Später bearbeiten ...
Es funktionierte in Firefox und IE mit:
div#mask { display: none; cursor: wait; z-index: 9999;
position: absolute; top: 0; left: 0; height: 100%;
width: 100%; background-color: #fff; opacity: 0; filter: alpha(opacity = 0);}
<a href="#" onclick="document.getElementById('mask').style.display = 'block'; return false">
Do something</a>
Das Problem (oder die Funktion) dieser Lösung ist, dass sie Klicks aufgrund des überlappenden Div verhindert (danke Kibbee).
Später später bearbeiten ...
Eine einfachere Lösung von Dorward:
.wait, .wait * { cursor: wait !important; }
und dann
<a href="#" onclick="document.body.className = 'wait'; return false">Do something</a>
Diese Lösung zeigt nur den Wartecursor an, erlaubt jedoch Klicks.
javascript
html
css
dynamic-css
Aleris
quelle
quelle
Antworten:
Ich verstehe, dass Sie möglicherweise keine Kontrolle darüber haben, aber Sie könnten sich stattdessen für ein "Maskierungs" -Div entscheiden, das den gesamten Körper mit einem Z-Index über 1 abdeckt. Der mittlere Teil des Div kann eine Lademeldung enthalten, wenn Sie möchten.
Dann können Sie den Cursor so einstellen, dass er auf das Div wartet und sich keine Gedanken über Links machen muss, da diese sich "unter" Ihrem Maskierungs-Div befinden. Hier ist ein Beispiel für CSS für das "Masking Div":
quelle
Wenn Sie diese leicht modifizierte Version des CSS verwenden, das Sie von Dorward gepostet haben,
Sie können dann einige wirklich einfache jQuery hinzufügen , die für alle Ajax-Aufrufe funktionieren:
oder für ältere jQuery-Versionen (vor 1.9):
quelle
$(document).ajaxStart(function () { $("html").addClass("wait"); });
$.active
Warteklasse entfernen, möchten Sie wahrscheinlich überprüfen, ob 0 ist, falls mehrere Anforderungen gestellt wurden und alle noch nicht abgeschlossen sind.Dies scheint in Firefox zu funktionieren
Der * -Teil stellt sicher, dass sich der Cursor nicht ändert, wenn Sie mit der Maus über einen Link fahren. Obwohl Links weiterhin anklickbar sind.
quelle
Ich habe heute stundenlang mit diesem Problem zu kämpfen. Grundsätzlich funktionierte in FireFox alles einwandfrei, aber (natürlich) nicht im IE. Im IE wurde der Wartecursor angezeigt, nachdem die zeitaufwändige Funktion ausgeführt wurde.
Ich habe endlich den Trick auf dieser Seite gefunden: http://www.codingforums.com/archive/index.php/t-37185.html
Code:
Mein Code wird in einer JavaScript-Klasse ausgeführt, daher this und MyClass (MyClass ist ein Singleton).
Ich hatte die gleichen Probleme beim Versuch, ein Div anzuzeigen, wie auf dieser Seite beschrieben. Im IE wurde es angezeigt, nachdem die Funktion ausgeführt wurde. Ich denke, dieser Trick würde auch dieses Problem lösen.
Vielen Dank, dass Sie dem Autor des Beitrags zig Mal Zeit gegeben haben. Du hast wirklich meinen Tag gemacht !!!
quelle
CSS:
.waiting * { cursor: 'wait' }
jQuery:
$('body').toggleClass('waiting');
quelle
Warum verwenden Sie nicht einfach eine dieser ausgefallenen Ladegrafiken (z. B. http://ajaxload.info/ )? Der wartende Cursor ist für den Browser selbst bestimmt. Wenn er angezeigt wird, hat er etwas mit dem Browser und nicht mit der Seite zu tun.
quelle
cursor: progress
nichtcursor: wait
. Die Verwendung dieses Cursors wäre viel kohärenter mit der Benutzererfahrung des Browsers. Aber ich mag die Idee wirklich, den Cursor zu ändern, um anzuzeigen, dass der Browser genauso funktioniert wie beim Laden einer Seite.Der einfachste Weg, den ich kenne, ist die Verwendung von JQuery wie folgt:
quelle
Versuchen Sie das CSS:
Es scheint, dass, wenn die Eigenschaft
body
wie angegeben verwendet wird, der Wartecursorhtml
nicht über die gesamte Seite angezeigt wird . Wenn Sie eine CSS-Klasse verwenden, können Sie außerdem leicht steuern, wann sie tatsächlich angezeigt wird.quelle
Hier ist eine ausgefeiltere Lösung, für die kein externes CSS erforderlich ist:
Damit können Sie tun:
quelle
Ich habe eine Adaption von Eric Wendelins Lösung verwendet. Es wird ein transparentes, animiertes Overlay-Wait-Div über den gesamten Körper angezeigt. Der Klick wird durch das Wait-Div blockiert, solange es sichtbar ist:
CSS:
js:
html:
quelle
Meine zwei Pence:
Schritt 1: Deklarieren Sie ein Array. Dies wird verwendet, um die ursprünglichen Cursor zu speichern, die zugewiesen wurden:
Schritt 2: Implementieren Sie die Funktion cursorModifyEntirePage
Was es tut: Ruft alle Elemente auf der Seite ab. Speichert die ihnen zugewiesenen ursprünglichen Cursor in dem in Schritt 1 deklarierten Array. Ändert die Cursor auf den gewünschten Cursor, der vom Parameter CursorType übergeben wird
Schritt 3: Stellen Sie die Cursor auf der Seite wieder her
Ich habe dies in einer Anwendung ausgeführt und es funktioniert gut. Die einzige Einschränkung ist, dass ich es nicht getestet habe, wenn Sie die Elemente dynamisch hinzufügen.
quelle
Verwenden Sie Folgendes, um den Cursor von JavaScript für das gesamte Fenster zu setzen:
Aus CSS:
Fügen Sie nach Bedarf weitere Logik hinzu.
quelle
BlockUI ist die Antwort auf alles. Versuche es.
http://www.malsup.com/jquery/block/
quelle
Dieses reine JavaScript scheint ziemlich gut zu funktionieren ... getestet in FireFox-, Chrome- und Edge-Browsern.
Ich bin mir über die Leistung nicht sicher, wenn Sie eine Überfülle an Elementen auf Ihrer Seite und einen langsamen Computer hatten ... probieren Sie es aus und sehen Sie.
Setzen Sie den Cursor für alle zu wartenden Elemente:
Setzen Sie den Cursor für alle Elemente auf den Standardwert zurück:
Eine alternative (und vielleicht etwas besser lesbare) Version wäre, eine setCursor-Funktion wie folgt zu erstellen:
und dann anrufen
und
um den Wartecursor bzw. den Standardcursor zu setzen.
quelle