如何将所有图像加载到内存中之前延迟JavaScript代码

时间:2013-05-17 12:21:22

标签: javascript jquery image

我没有JavaScript知识。我正在尝试延迟$('#image').reel代码,直到加载图像,这样我才能获得图像宽度值。

   stitched: imgwidth,
   loops: false,
   frames: 30,
   frame: 1,
   wheelable: false
   // speed: 0,
   // timeout: 1
}); 

function imageReel() {
    $('#image').empty();
    var image = '<img id="image" src=\'images/' + arrReel[imgcount] + '.png\' width="1000" height= "700" />';
    $('#image-wrapper').html(image);
    $('#image').reel({
        stitched: imgwidth,
        loops: false,
        frames: 30,
        frame: 1,
        wheelable: false
        // speed: 0,
        // timeout: 1
    });
    console.log(imgwidth);
}

根据第一个答案尝试1

 $('#image').empty();
        // var image = '<img id="image" src=\'images/'+arrReel[imgcount]+'.png\' width="1000" height= "700" />';

      $(function(){
      image=new Image();
      image = '<img id="image" src=\'images/'+arrReel[imgcount]+'.png\' width="1000" height= "700" />';

        image.onload=function(){
           $('#image-wrapper').html(image);
           $('#image').reel({

            stitched:    imgwidth,
            loops:       false,
            frames:       30,
            frame:        1,
            wheelable: false, 
            // speed:       0,
            // timeout:     1
          }); 
    };
    $('body').append(image);
});

结果。仍然给我0宽度加上创建多个图像

根据kilian的回答尝试2

 <div id="image-wrapper"><img id="image" src='images/outsidedark.png' width="1000" height= "700" onload="someFunction()" /></div>

        function someFunction()
        {
            console.log(imgwidth);
            $('#image').reel({

            // stitched:    3208,

            stitched:    imgwidth,
            loops:       false,
            frames:       30,
            frame:        1,
            wheelable: false, 
            // speed:       0,
            // timeout:     1
          });


        }

结果图像不断加载。因为插件可能,但我认为我需要onload只加载该函数一次并加载它多次。宽度仍然是0,并且由于控制台日志0保持显示,就像卡在无限循环中一样。

4 个答案:

答案 0 :(得分:2)

不确定什么是reel jquery插件(是插件吗?)...但是下面的代码显示了真实的图像宽度和高度。

$(function(){
    var image=new Image();
    image.src='http://www.google.com/images/srpr/logo4w.png';

    image.onload=function(){
        console.log($(this).height());
        console.log($(this).width());
    };
    $('body').append(image);
});

我希望这会有所帮助。

答案 1 :(得分:1)

使用image.onload = function () { //your code here }应该有效,但我注意到在某些浏览器中(例如Chrome),如果浏览器缓存图像,则onload事件不再触发。

<强>更新

经过一番研究后我发现this jQuery plugin解决了浏览器缓存图像的问题。此外,它是跨浏览器的。试一试。

答案 2 :(得分:0)

您应该使用load()事件。

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

答案 3 :(得分:0)

将onload事件附加到图像元素。

<img onload="someFunction()" ... >


function someFunction() {
    // image.reel part
}