2009-07-31 7 views
0

Est-il possible que les contrôles asc.aspx aient leur propre événement de chargement côté client, comme un window.onload pour chacun, afin que je puisse masquer les divs de chargement et afficher le contenu div lorsque http le transfert est terminé.Contrôles ASCX et fonction window.onload

J'ai des menus d'image et des galeries de cycle qui ont sérieusement besoin d'une progression de chargement et je ne sais pas comment les implémenter. Le site est http://techlipse.net. Merci d'avance.

Répondre

0

Vous pouvez ajouter un écouteur à l'événement de chargement ... (ne pas lier directement dans l'événement que vous pourriez causer un lien différent pour ne pas être appelé)

Essayez d'utiliser une bibliothèque JS pour vous aider écouter des événements, YUI, jQuery sont amusants.

http://developer.yahoo.com/yui/event/#start

var oElement = document.getElementById("myBody"); 
function fnCallback(e) { alert("i am loaded"); } 
YAHOO.util.Event.addListener(oElement, "load", fnCallback); 

YUI Library a une façon d'écouter quand une zone est "prêt"

http://developer.yahoo.com/yui/event/#onavailable

Vous pourriez avoir un auditeur qui attend voir si quand un div est chargé , puis lancez un peu d'ajax à vos processus de longue durée.

0

Il y a plusieurs façons de le faire. Je profite du fait que l'événement onload n'est pas déclenché tant que tout le contenu de la page n'est pas complètement chargé. Comme il semble que votre site utilise déjà jQuery, tous les exemples ci-dessous l'utiliseront.

Dans vos contrôles utilisateur, vous pouvez les masquer par défaut. Pour ce faire, placez un attribut style dans une balise wrapper pour votre contrôle:

<div style="display: none"> 
    <!-- Optionally you could use "visibility: hidden" 
     instead of "display: none". This will keep the 
     control's placeholder, but not physically show it to the user. 
    --> 
    <!-- Your control content here --> 
</div> 

A l'intérieur de votre commande, vous pouvez avoir le code JavaScript comme celui-ci (à supposer que jQuery sera inclus en haut de la page, qui est la façon dont votre site est maintenant). Ce serait placé directement sous votre contrôle.

<script type="text/javascript"> 
$(window).load(function() { 
    $("#" + <%= this.ClientID %>).css("display", "block"); 
    // If you chose to use visibility, try the following line instead 
    //$("#" + <%= this.ClientID %>).css("visibility", "visible"); 
}); 
</script> 

Pour expliquer comment cela fonctionne ...

Lorsque le navigateur charge d'abord la page, les paramètres par défaut de contrôle d'être caché. Ce ne sera pas rendu du tout. jQuery s'abonne à l'événement load() de votre page. Lorsque l'événement de chargement se déclenche, il affiche le contrôle. Cela arrive seulement une fois que tout est fini de charger.

Vous pouvez également masquer tout "chargement ..." <div /> dans cet événement de chargement également.


Une autre option, qui peut être mieux en fonction de ce que vous faites, est de structurer votre page afin que vous avez 2 divs principaux. Un div "loading" et un div "content" La div de chargement serait affichée par défaut avec un message de chargement générique. Le contenu div serait caché par défaut (ou simplement caché derrière un exemple comme ci-dessous). L'événement onload supprime les objets de chargement de la page et permet aux images d'être affichées.

Cet exemple ci-dessous affiche un message de chargement au-dessus de la page entière jusqu'à ce que le chargement soit terminé.

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Dynamic Loading Test</title> 
    <style type="text/css"> 
    body { 
     margin: 0px; 
     padding: 0px; 
     overflow: hidden/* Prevent user from scrolling. */ 
    } /* Scrolling is re-enabled on load by JavaScript */ 
    .loadingBackground { 
     background: #000; 
     filter: alpha(opacity=70); /* internet explorer */ 
     -khtml-opacity: 0.7;  /* khtml, old safari */ 
     -moz-opacity: 0.7;  /* mozilla, netscape */ 
     opacity: 0.7;   /* fx, safari, opera */ 
     height: 100%; 
     width: 100%; 
     position: absolute; 
    } 
    .loadingWrapper { 
     position: absolute; 
     top: 15%; 
     width: 100%; 
    } 
    .loading { 
     margin: 0 auto;   
     width: 300px; 
     text-align: center; 
     background: #ffffff; 
     border: 3px solid #000; 
    } 

    </style> 
    <script 
     src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" 
     type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(window).load(function() { 
      $('.loadingBackground, loadingWrapper, .loading').fadeOut('normal'); 
      $('body').css('overflow', 'auto'); 
     }); 
    </script> 
</head> 
<body> 
<div class="loadingBackground"></div> 
<div class="loadingWrapper"> 
<div class="loading"> 
Please Wait...<br /> 
<img src="http://www.ajaxload.info/cache/FF/FF/FF/00/00/00/30-1.gif" /> 
</div> 
</div> 
<!-- Large Images included to increase load time to show the loading effect --> 
<img src="http://upload.wikimedia.org/wikipedia/commons/3/3c/KillaryHarbour.jpg" 
    style="height: 100%; width: 100%" /> 
<img src="http://upload.wikimedia.org/wikipedia/commons/6/6c/Ireland_-_Plains_of_South_Kildare.jpg" 
    style="height: 100%; width: 100%" /> 
</body> 
</html> 
Questions connexes