What you are facing is the classic image loading issue.
I think the following code should help you, I found it sometime ago it is based
on this page : http://www.webreference.com/programming/javascript/gr/column3/
Basically, you need to have
- an array with url's for your big images such as picSrc[0] =
'images/big1.jpg'; picSrc[1] = 'images/big3.jpg'
- a hidden <div id="waitingPic"> in your page which displays your
waiting message
When you want to load your big images you call these two lines:
$('waitingPic').show()
initPics()
Here's the code
function initPics(){
var ImagePreLoader = Class.create({
callback: null,
imageCache: new Array,
loaded: 0,
processed: 0,
noOfImages: 0,
initialize: function(images, options) {
if (options) {
if (options.callback) this.callback =
options.callback;
}
this.noOfImages = images.length;
for ( var i = 0; i < images.length; i++ )
this.preload(images[i]);
},
preload: function(imgSrc) {
var image = new Image;
this.imageCache.push(image);
Event.observe(image, 'load',
this.onload.bindAsEventListener(this), false);
Event.observe(image, 'error',
this.onerror.bindAsEventListener(this), false);
Event.observe(image, 'abort',
this.onabort.bindAsEventListener(this), false);
image.preloader = this;
image.loaded = false;
image.src = imgSrc;
},
onComplete: function() {
this.processed++;
if (this.processed==this.noOfImages) {
this.callback(this.imageCache, this.loaded);
}
},
onload: function(e) {
this.loaded++;
this.onComplete();
},
onerror: function(e) {
this.onComplete();
},
onabort: function(e) {
this.onComplete();
}
});
var imgPreloadCallback = function(imageCache, loaded) {
// where:
// imageCache is an array of the loaded images
// loaded is an int of the number of images that loaded.
//doSomethingAfterImagesAreLoaded();
$('waitingPic').hide();
picsPreLoaded = true;
}
var imgLoader = new
ImagePreLoader(picSrc,{callback:imgPreloadCallback});
}
Hope this helps.
Christophe
Le 11 mars 2010 à 16:40, Guille San a écrit :
> Hi everybody:
> I was trying use dom:loaded, but I read in the Api of prototype that
> this function load all HTML code except the images. My problem is that
> all my web is an image and I want that it were full loaded before the
> webpage shows it, because that I want that it seems like a video and if
> it isn´t fully loaded it doesn´t seem a video. Anyone can help me?? I
> tried using the following:
> <script type="text/javascript">
> function lastSpy() {
>
> var target = $('imagen');
>
> if (!target) return false;
> new Ajax.PeriodicalUpdater(target,
> 'http://localhost:3000/',{frequency:'0.25'})
> }
>
> Event.observe(window, 'load', lastSpy, false);
>
> Event.observe(window, 'load', function() {
> $$('imagen').invoke('hide');
> })
>
> </script>
> <div id="imagen" >
> <%=image_tag("/guarrada/Debug/foto.jpg") %>
> </div>
>
>
> THANKS!!!!!!!!
> --
> Posted via http://www.ruby-forum.com/.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.