2

Pour afficher un arrière-plan opaque ou un gif animé lors de l'exécution d'une méthode après un clic sur un bouton, cela ne s'affiche pas. Il ne fonctionne qu'après que tout le code a été exécuté. Puis-je le faire dans jQuery, c'est-à-dire sur un rendu d'événement click, le html change avant et après le code principal.Comment faire pour afficher l'arrière-plan opaque sur l'événement jQuery click

La méthode de longue durée ajoute 100-500 divs à la page qui prend environ 10 secondes pour terminer.

 
$('#button).click(function() { 
    $('#curtain').css('visibility', 'visible'); 
    longRunningMethod();  
    $('#curtain').css('visibility', 'hidden'); 
});  

Le problème est que le #curtain div montre jamais, comme le javascript complet doit être exécuté avant de rendre tous les changements.

Style:

 

#curtain { 
    position: fixed; 
    _position: absolute; 
    z-index: 99; 
    left: 0; 
    top: 0; 
    width: 100%; 
    height: 100%; 
    _height: expression(document.body.offsetHeight + "px"); 
    background-color: #CCCCCC; 
    filter:alpha(opacity=50); 
    -moz-opacity:0.5; 
    -khtml-opacity: 0.5; 
    opacity: 0.5; 
    visibility: hidden; 
} 

+0

Que fait la méthode longue durée? – tster

+0

Votre question commence par une phrase qui prête à confusion, pouvez-vous reformuler cela? Je n'ai aucune idée de ce que vous demandez vraiment. – Incognito

Répondre

2

Ce genre est un hack, mais si vous utilisez setTimeout cela pourrait fonctionner.

$('#button').click(function() { 
    $('#curtain').css('visibility', 'visible'); 
    setTimeout(doBigJob, 100); 
}); 

function doBigJob() 
{ 
    longRunningMethod();  
    $('#curtain').css('visibility', 'hidden'); 
} 
+0

J'aime cette hackaroo. plutôt cool. – tster

+0

Merci cela a fonctionné plutôt bien :-) – mrjohn

0

Vous ne devriez jamais avoir de longues méthodes de fonctionnement dans le thread d'interface utilisateur d'une page Web. Cela rendra la page bloquée et très ennuyante pour l'utilisateur. Au lieu de cela, vous devez utiliser le rappel asynchrone. A la place, vous devez utiliser le rappel asynchrone. La méthode de longue durée que je suppose fait quelques appels AJAX. Dans ce cas, il devrait accepter une fonction comme un argument (comme le "clic" jquery, "ajax", etc.). Passez ensuite cette fonction à la méthode ajax en tant que rappel d'achèvement ou de succès.

Ensuite, vous pouvez faire:

$('#button).click(function() { 
    $('#curtain').css('visibility', 'visible'); 
    longRunningMethod(function() {$('#curtain').css('visibility', 'hidden');}); 
});