rubyonrailsin

A Ruby and Rails talk

Thursday, March 11, 2010


Re: [Rails] dom:loaded problems

by rubyonrailsin 0 comments

Tag


Share this post:
Design Float
StumbleUpon
Reddit

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 rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.


No comments:

Post a Comment

Subscribe feeds via e-mail

Blog Archive