<script>
function main(callback){
document.getElementsByTagName('body')[0].style.cursor = 'wait';
var t = 50000;
for (var i = 0; i < t; i++) {
document.getElementById("myTable").insertRow(0).insertCell(0).innerHTML = i;
}
callback();
};
function callback(){
document.getElementsByTagName('body')[0].style.cursor = 'auto';
}
</script>
Mais j'ai le même résultat
Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
Attention, le curseurr imposé sur l'ancre peut masquer celui de la page ! Et puis, ne mélangeons pas les genres avec une fonction non testée isolement.
<!DOCTYPE html>
<html>
<head>
<title>Tests</title>
<meta charset="utf-8" />
<style>
body {font-family:Garamond}
a {cursor:pointer}
</style>
</head>
<body>
<a id="clc" onclick="main(callback)">GO</a>
<script>
function main(callback){
document.body.style.cursor = 'wait';
document.getElementById('clc').style.cursor='wait';
setTimeout(callback,5000);
};
function callback(){
document.body.style.cursor = 'auto';
document.getElementById('clc').style.cursor='auto';
}
</script>
</body>
</html>
Ceci fonctionne, la condition à observer consiste à interrompre le script pour que les modifications de la page soient opérées avant le lancement de la fonction. Une brève interruption obtenue par un setTimeout suffirait pour lancer une fonction plus complexe.
C'est pas très beau mais je préfère quand même ca à la solution du timeout:
function main(callback) {
document.getElementsByTagName('body')[0].style.cursor = 'wait';
var t = 50000;
for (var i = 0; i < t; i++) {
document.getElementById("myTable").insertRow(0).insertCell(0).innerHTML = i;
if (i >= t - 1) {
callback();
}
}
};
function callback() {
document.getElementsByTagName('body')[0].style.cursor = 'auto';
}
Avec les promises ca donne quoi? pareil?
var main = new Promise(
function(resolve, reject) {
document.getElementsByTagName('body')[0].style.cursor = 'wait';
var t = 50000;
for (var i = 0; i < t; i++) {
document.getElementById("myTable").insertRow(0).insertCell(0).innerHTML = i;
}
resolve(1);
});
main.then(function() {
document.getElementsByTagName('body')[0].style.cursor = 'auto';
}).catch(
// Promesse rejetée
function() {
console.log("Qu'est ce t'a foutu!!");
});
- Edité par Krogoth 27 octobre 2016 à 10:30:17
Un petit +1 si je vous ai aidé est toujours appréciable :).
007julien: effectivement j'avais trouvé la solution du timeout qui est une solution de contournement, mais qui n'est pas efficace car si le temps d’exécution de ma fonction est de moins de 5 secondes je bloque l'utilisateur pour rien
Krogoth: je dois me former sur les promises mais j'ai déja trouvé que ça ne fonctionne sur IE que depuis EDGE donc pas compatible avec ma demande IE9 en l’occurrence.
Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
Il suffit d'un setTimeout de 5 ou 7 millisecondes pour interrompre le script (*), l'utilisateur qui réagit au mieux en 200-250 millisecondes (voir cette page) n'y verra rien !
(*) Ce temps est sans rapport avec mon setTimeout qui assure à la fois l'interruption du script et la simulation de l'exécution de la fonction.
Autrement dit le schéma serait le suivant :
Clic => script de modification du curseur,
setTimeout d'interruption très court (5 à 7 millisecondes) pour que le script prenne effet
Exécution de la fonction
rétablissement du curseur lancer à la fin de l'exécution pour rétablir le curseur.
À titre de démonstration la page suivante fonctionne sur le même principe d'utilisation d'un settimeout pour permettre des sorties intermédiaires.
- Edité par 007julien 27 octobre 2016 à 22:35:55
Fonction javascript synchrone
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.