Jeg siger nej tak! At tjekke hver x antal ms kan vidst ikke kaldes videre optimalt!
Havde ikke rigtig noget andet at lave, så jeg lavede en lille OOP løsning. Håber du kan bruge den
- <!DOCTYPE html>
- <html>
- <head>
- <title>JS Image Preloader</title>
- <script>
- var Preloader = {
- images: {},
- callbacks: [],
-
- add: function(src) {
- if(typeof src !== 'string' || src.length === 0) return;
-
- var image = new Image();
- image.onload = function(e) {
- Preloader._load(e, src);
- }
- image.src = src;
- Preloader.images[src] = {img: image, loaded: image.complete};
- },
-
- ready: function(callback) {
- if(typeof callback !== 'function') return;
-
- Preloader.callbacks.push(callback);
- Preloader._check();
- },
-
- _check: function() {
- // Check if all images are loaded
- var cnt = 0, ldn = 0, i, length;
- for(i in Preloader.images) {
- if(Preloader.images[i].img instanceof Image) {
- cnt++;
-
- if(Preloader.images[i].loaded) {
- ldn++;
- }
- }
- }
-
- // If they are, execute all callbacks
- if(cnt === ldn) {
- for(i = 0, length = Preloader.callbacks.length; i < length; i++) {
- Preloader.callbacks[i](Preloader.images);
- }
- }
- },
-
- _load: function(e, id) {
- e = e || window.event;
- Preloader.images[id].loaded = true;
- Preloader._check();
- }
- };
-
- Preloader.add('./img/Desert.jpg');
- Preloader.add('./img/Hydrangeas.jpg');
- Preloader.ready(function(images) {
- console.log("Ready: ", images);
- });
- </script>
- </head>
- <body>
-
- </body>
- </html>
Du kan også evt. indsætte dine billeder i <img> tags
før window.onload, og så derefter lytte efter window.onload, som først vil blive "fired" når samtlige billeder er loadet.
Indlæg senest redigeret d. 14.12.2011 11:46 af Bruger #11328