¿Es posible configurar el cursor para 'esperar' en toda la página html de una manera simple? La idea es mostrar al usuario que algo está sucediendo mientras se completa una llamada ajax. El siguiente código muestra una versión simplificada de lo que probé y también demuestra los problemas con los que me encuentro:
- si un elemento (# id1) tiene un estilo de cursor establecido, ignorará el establecido en el cuerpo (obviamente)
- algunos elementos tienen un estilo de cursor predeterminado (a) y no mostrarán el cursor de espera al pasar el mouse
- el elemento del cuerpo tiene una cierta altura dependiendo del contenido y si la página es corta, el cursor no se mostrará debajo del pie de página
La prueba:
<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>
Edición posterior ...
Funcionó en Firefox e IE con:
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>
El problema con (o característica de) esta solución es que evitará clics debido al div superpuesto (gracias Kibbee)
Más tarde editar ...
Una solución más simple de Dorward:
.wait, .wait * { cursor: wait !important; }
y entonces
<a href="#" onclick="document.body.className = 'wait'; return false">Do something</a>
Esta solución solo muestra el cursor de espera pero permite clics.
javascript
html
css
dynamic-css
Aleris
fuente
fuente
Respuestas:
Entiendo que es posible que no tenga control sobre esto, pero podría optar por un div de "enmascaramiento" que cubra todo el cuerpo con un índice z superior a 1. La parte central del div podría contener un mensaje de carga si lo desea.
Luego, puede configurar el cursor para que espere en el div y no tenga que preocuparse por los enlaces, ya que están "debajo" de su div de enmascaramiento. Aquí hay un ejemplo de CSS para el "div de enmascaramiento":
fuente
Si usa esta versión ligeramente modificada del CSS que publicó desde Dorward,
luego puede agregar un jQuery realmente simple para que funcione para todas las llamadas ajax:
o, para versiones anteriores de jQuery (antes de 1.9):
fuente
$(document).ajaxStart(function () { $("html").addClass("wait"); });
$.active
es 0, en caso de que se hayan realizado varias solicitudes y aún no hayan finalizado.Esto parece funcionar en Firefox
La parte * asegura que el cursor no cambie cuando pasas el cursor sobre un enlace. Aunque todavía se podrá hacer clic en los enlaces.
fuente
Hoy he estado luchando con este problema durante horas. Básicamente, todo funcionaba bien en FireFox pero (por supuesto) no en IE. En IE, el cursor de espera se mostraba DESPUÉS de que se ejecutó la función que consumía mucho tiempo.
Finalmente encontré el truco en este sitio: http://www.codingforums.com/archive/index.php/t-37185.html
Código:
Mi código se ejecuta en una clase de JavaScript, por lo tanto, this y MyClass (MyClass es un singleton).
Tuve los mismos problemas al intentar mostrar un div como se describe en esta página. En IE se mostraba después de que se había ejecutado la función. Así que supongo que este truco también resolvería ese problema.
Un trillón de gracias a Glenngv, el autor de la publicación. Realmente me alegraste el día !!!
fuente
css:
.waiting * { cursor: 'wait' }
jQuery:
$('body').toggleClass('waiting');
fuente
¿Por qué no usas uno de esos elegantes gráficos de carga (por ejemplo: http://ajaxload.info/ )? El cursor de espera es para el navegador en sí, por lo que siempre que aparece tiene algo que ver con el navegador y no con la página.
fuente
cursor: progress
no lo estácursor: wait
. Usar ese cursor sería mucho más coherente con la experiencia del usuario del navegador. Pero realmente me gusta la idea de cambiar el cursor para indicar que el navegador está funcionando igual que cuando carga una página.La forma más fácil que conozco es usar JQuery así:
fuente
Prueba el CSS:
Parece que si la propiedad
body
se usa como apostadahtml
, no muestra el cursor de espera en toda la página. Además, si usa una clase css, puede controlar fácilmente cuándo realmente la muestra.fuente
Aquí hay una solución más elaborada que no requiere CSS externo:
con esto puedes hacer:
fuente
Usé una adaptación de la solución de Eric Wendelin . Mostrará un wait-div superpuesto, transparente y animado en todo el cuerpo, el clic será bloqueado por el wait-div mientras esté visible:
css:
js:
html:
fuente
Mis dos peniques:
Paso 1: declare una matriz. Esto se utilizará para almacenar los cursores originales que se asignaron:
Paso 2: implementar la función cursorModifyEntirePage
Qué hace: Obtiene todos los elementos de la página. Almacena los cursores originales asignados a ellos en la matriz declarada en el paso 1. Modifica los cursores al cursor deseado según lo pasado por el parámetro CursorType
Paso 3: restaura los cursores en la página
He ejecutado esto en una aplicación y funciona bien. La única advertencia es que no lo he probado cuando está agregando dinámicamente los elementos.
fuente
Para configurar el cursor desde JavaScript para toda la ventana, use:
De CSS:
Agregue más lógica según sea necesario.
fuente
BlockUI es la respuesta para todo. Darle una oportunidad.
http://www.malsup.com/jquery/block/
fuente
Este JavaScript puro parece funcionar bastante bien ... probado en navegadores FireFox, Chrome y Edge.
No estoy seguro del rendimiento de esto si tuvieras una sobreabundancia de elementos en tu página y una computadora lenta ... pruébalo y verás.
Coloque el cursor para que todos los elementos esperen:
Establecer el cursor para todos los elementos de nuevo al valor predeterminado:
Una versión alternativa (y quizás un poco más legible) sería crear una función setCursor de la siguiente manera:
y luego llamar
y
para configurar el cursor de espera y el cursor predeterminado respectivamente.
fuente