Est-il possible de régler le curseur pour «attendre» sur toute la page html d'une manière simple? L'idée est de montrer à l'utilisateur que quelque chose se passe pendant qu'un appel ajax est terminé. Le code ci-dessous montre une version simplifiée de ce que j'ai essayé et démontre également les problèmes que je rencontre:
- si un élément (# id1) a un style de curseur défini, il ignorera celui défini sur le corps (évidemment)
- certains éléments ont un style de curseur par défaut (a) et n'afficheront pas le curseur d'attente au survol
- l'élément body a une certaine hauteur en fonction du contenu et si la page est courte, le curseur ne s'affichera pas sous le pied de page
Le 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>
Édition ultérieure ...
Cela a fonctionné dans Firefox et IE avec:
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>
Le problème avec (ou la caractéristique de) cette solution est qu'elle empêchera les clics en raison du chevauchement div (merci Kibbee)
Plus tard, modifier plus tard ...
Une solution plus simple de Dorward:
.wait, .wait * { cursor: wait !important; }
puis
<a href="#" onclick="document.body.className = 'wait'; return false">Do something</a>
Cette solution n'affiche que le curseur d'attente mais autorise les clics.
javascript
html
css
dynamic-css
Aleris
la source
la source
Réponses:
Je comprends que vous n'avez peut-être pas le contrôle sur cela, mais vous pouvez plutôt opter pour un div "masquant" qui couvre tout le corps avec un z-index supérieur à 1. La partie centrale du div pourrait contenir un message de chargement si vous le souhaitez.
Ensuite, vous pouvez définir le curseur pour attendre sur le div et ne pas avoir à vous soucier des liens car ils sont "sous" votre div de masquage. Voici quelques exemples de CSS pour le "masking div":
la source
Si vous utilisez cette version légèrement modifiée du CSS que vous avez posté de Dorward,
vous pouvez ensuite ajouter un jQuery très simple pour fonctionner pour tous les appels ajax:
ou, pour les anciennes versions de jQuery (avant la 1.9):
la source
$(document).ajaxStart(function () { $("html").addClass("wait"); });
$.active
est 0, au cas où plusieurs demandes ont été faites et qu'elles ne sont pas encore terminées.Cela semble fonctionner dans Firefox
La partie * garantit que le curseur ne change pas lorsque vous survolez un lien. Bien que les liens soient toujours cliquables.
la source
Je lutte contre ce problème depuis des heures aujourd'hui. Fondamentalement, tout fonctionnait très bien dans FireFox mais (bien sûr) pas dans IE. Dans IE, le curseur d'attente était affiché APRÈS l'exécution de la fonction qui prend du temps.
J'ai enfin trouvé l'astuce sur ce site: http://www.codingforums.com/archive/index.php/t-37185.html
Code:
Mon code s'exécute dans une classe JavaScript d'où le this et MyClass (MyClass est un singleton).
J'ai eu les mêmes problèmes en essayant d'afficher un div comme décrit sur cette page. Dans IE, il était affiché après l'exécution de la fonction. Je suppose donc que cette astuce résoudrait également ce problème.
Merci mille fois à Glenngv l'auteur du message. Tu as vraiment fait ma journée !!!
la source
css:
.waiting * { cursor: 'wait' }
jQuery:
$('body').toggleClass('waiting');
la source
Pourquoi n'utilisez-vous pas simplement l'un de ces graphiques de chargement sophistiqués (par exemple: http://ajaxload.info/ )? Le curseur en attente est pour le navigateur lui-même - donc chaque fois qu'il apparaît, il a quelque chose à voir avec le navigateur et non avec la page.
la source
cursor: progress
ne l' est pascursor: wait
. L'utilisation de ce curseur serait beaucoup plus cohérente avec l'expérience utilisateur du navigateur. Mais j'aime vraiment l'idée de changer le curseur pour indiquer que le navigateur fonctionne comme il fonctionne lorsqu'il charge une page.Le moyen le plus simple que je connaisse est d'utiliser JQuery comme ceci:
la source
Essayez le css:
Il semble que si la propriété
body
est utilisée comme apposée,html
elle n'affiche pas le curseur d'attente sur toute la page. De plus, si vous utilisez une classe css, vous pouvez facilement contrôler quand elle l'affiche réellement.la source
Voici une solution plus élaborée qui ne nécessite pas de CSS externe:
avec cela, vous pouvez faire:
la source
J'ai utilisé une adaptation de la solution d' Eric Wendelin . Il affichera une superposition transparente et animée wait-div sur tout le corps, le clic sera bloqué par le wait-div lorsqu'il est visible:
css:
js:
html:
la source
Mes deux pence:
Étape 1: Déclarez un tableau. Cela sera utilisé pour stocker les curseurs d'origine qui ont été affectés:
Étape 2: implémenter la fonction cursorModifyEntirePage
Ce qu'il fait: Obtient tous les éléments de la page. Stocke les curseurs d'origine qui leur sont attribués dans le tableau déclaré à l'étape 1. Modifie les curseurs en curseur souhaité tel que passé par le paramètre CursorType
Étape 3: restaurer les curseurs de la page
J'ai exécuté ceci dans une application et cela fonctionne très bien. Le seul inconvénient est que je ne l'ai pas testé lorsque vous ajoutez dynamiquement les éléments.
la source
Pour définir le curseur de JavaScript pour toute la fenêtre, utilisez:
De CSS:
Ajoutez une logique supplémentaire si nécessaire.
la source
BlockUI est la réponse à tout. Essaie.
http://www.malsup.com/jquery/block/
la source
Ce pur JavaScript semble fonctionner plutôt bien ... testé sur les navigateurs FireFox, Chrome et Edge.
Je ne suis pas sûr de la performance de cela si vous aviez une surabondance d'éléments sur votre page et un ordinateur lent ... essayez-le et voyez.
Définissez le curseur pour que tous les éléments attendent:
Remettez le curseur de tous les éléments par défaut:
Une version alternative (et peut-être un peu plus lisible) serait de créer une fonction setCursor comme suit:
puis appelez
et
pour définir respectivement le curseur d'attente et le curseur par défaut.
la source