Comment puis-je forcer l'affichage d'un objet avec jQuery avant une longue fonction JS de calcul? Je veux simplement afficher la molette de rotation impressionnante des polices avant que la fonction ne démarre. Lorsque je le débogue, cela fonctionne bien car il y a des pauses entre mes étapes de débogage, mais lorsque j'exécute la page, elle n'affiche pas la molette mais va directement dans la fonction.

$('#waitSpinner').show();
longCalculation();
0
El Dude 16 juil. 2015 à 01:47

2 réponses

Meilleure réponse

Vous pouvez spécifier un rappel de la méthode show afin qu'une fois le .show () terminé, il exécute votre prochain morceau de code.

Exemple:

$('#waitSpinner').show('fast', longCalculation);

Ou vous pouvez le faire avec une fonction anonyme comme celle-ci

$('#waitSpinner').show('fast', function(){
     longCalculation()
});
1
DominicValenciana 15 juil. 2015 à 23:07

Mettez votre calcul dans la file d'attente des événements:

setTimeout(longCalculation, 1);

Cela permettra le redessiner avant le calcul. Vous pouvez également consulter les Web Workers afin de effectuez les calculs dans un thread d'arrière-plan:

var spinner = $('#waitSpinner');
spinner.show();
var worker = new Worker('calculation.js');
worker.onmessage = function (e) {
  console.log('Result is ' + e.data);
  spinner.hide();
};

// calculation.js

longCalculation();
postMessage(calculationResult);
2
Jacob 15 juil. 2015 à 23:00