This may be out of left field from what you're asking but I wrote a script
called "onImagesLoaded", with a tolerance setting.  I used this to fire the
jquery.flash.js script only after most of the images had been downloaded.

Some sites I've coded were overly image-heavy with the Flash at the top of
the page, so it would tend to make an ugly user-experience.  If they're of
any value to you, here they are:

// Fire a specific event once all images are loaded.
function onImagesLoaded(fn,tolerance)
{
  // Ensure we have a valid function.
  if (!$.isFunction(fn)) return;
        
  var images = $('img').filter(function(el,i) { return !this.complete; });
                
  if (images.length)
  {
    window.$loadedImageCount = images.length;
    window.$imagesLoadedTolerance = $.toInt(tolerance);
    if (!window.$onImagesLoaded) window.$onImagesLoaded = [];
    window.$onImagesLoaded.push(fn);
    images.one('load',imageHasLoaded);
  }
  else
    fn();
}

// Each time an image is loaded, check to see if we can fire the event.
function imageHasLoaded(e)
{
  // Ensure we still have functions to execute.
  if (!window.$onImagesLoaded) return;

  // Reduce the number of images left.
  try { window.$loadedImageCount--; } catch(ex) {}
        
  // If we've reached 0 or the tolerance, fire the events.
  if ((window.$loadedImageCount||0) <= (window.$imagesLoadedTolerance||0))
  {
    for (var i=0;i<window.$onImagesLoaded.length;i++)
    {
      if ($.isFunction(window.$onImagesLoaded[i]))
        window.$onImagesLoaded[i]();
    }
    window.$onImagesLoaded = null;
  }
}

-----Original Message-----
From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Karl Rudd
Sent: Friday, March 07, 2008 4:31 AM
To: jquery-en@googlegroups.com
Subject: [jQuery] Re: How to know if the entire page has loaded, AFTER it
has loaded? [advanced]


Use the "good old" "load" event.

$(window).load(function () {
  // run code
});

( from http://docs.jquery.com/Events/load )

Karl Rudd

On Fri, Mar 7, 2008 at 11:10 PM, Iair Salem <[EMAIL PROTECTED]> wrote:
>
>  Sorry about not being so clear: what I exactly want is to know if
>  window has loaded. I need to be sure if all the IMAGES had been
>  loaded, that's why jQuery.isReady is useless for me. jquery.isReady
>  equals true when DOM is loaded, but not the images.
>  I hope someone could help me.
>  Iair Salem.
>
>  PD: Please Google do something about the delay for a message to be
>  seen and searchable on the group.
>
>
>  On 7 mar, 09:11, Ariel Flesler <[EMAIL PROTECTED]> wrote:
>  > As far as I know, document.ready will execute functions right away if
>  > the dom is ready.
>  > Also you can use: if( jQuery.isReady ).....
>  >
>  > On 6 mar, 17:46,IairSalem<[EMAIL PROTECTED]> wrote:
>  >
>  > > Hello everyone, I have a problem
>  >
>  > > The basics:
>  > > $(document).ready(function(){alert("DOM Loaded")});
>  > > $(window).load(function(){alert("Full Page & Images Loaded")});
>  >
>  > > But, what happens if I do this?:
>  >
>  > > $(window).load(function(){
>  > > setTimeout("foo()", 2000);
>  > > );
>  >
>  > > function foo(){
>  > > $(window).load(function(){alert("this alert will never occur")}); /
>  > > *calling window load() after it has been called once results in
>  > > nothing happening....*/
>  >
>  > > }
>  >
>  > > This beaviour isn't the same as $(document).ready, because $
>  > > (document).ready is handled by jQuery, and jQuery sets jQuery.isReady
>  > > = true, and calls it inmediately.
>  >
>  > > Maybe I'm asking for the property jQuery.isPageLoaded which would
tell
>  > > me if the entire page has loaded, also AFTER the page has loaded (for
>  > > example in a click event).
>  >
>  > > There is a dirty workaround:
>  >
>  > > var isPageLoaded = false;
>  > > $(window).load(
>  > > function(){
>  > > isPageLoaded=true;}
>  >
>  > > );
>  >
>  > > This will workaround the problem and fix it partially (because in
>  > > theory this won't work when loading scripts dinamically)
>  >
>  > > If you have a better solution, please share it with the group.
>  >
>  > > Thank you,
>  >
>  > >IairSalem
>

Reply via email to