在图像完全加载之前触发图像加载事件?

Posted

技术标签:

【中文标题】在图像完全加载之前触发图像加载事件?【英文标题】:image onload event triggering before its image fully loaded? 【发布时间】:2010-11-02 13:05:09 【问题描述】:

我正在使用 Jcrop jquery 插件,并在 onload 事件上触发 initJcropBox() 函数。

但此功能在图像完全加载之前被触发。这导致了问题。例如显示不正确的 jcropbox 大小或根本不显示 jcropbox。

当我放置一条线时,它工作正常。但不是解决方案。 setTimeout('initJcropBox()',2000);

图像在浏览器中完全加载/渲染后如何触发initJcropbox()函数?

  var api;

     function initJcropBox()
      api = $.Jcrop('#cropbox',
          bgColor: 'black',
          bgOpacity: .7,
          onSelect: updateCoords,
          onChange: updateCoords,
          boxWidth: 400
      );
        api.animateTo([0,0,$('#cropbox').width(),$('#cropbox').height()]);
         

    function insertImage(name) 
        var img = new Image();
        img.onload = initJcropBox;
        img.src = name;
        img.id = 'cropbox';

        return img;
    

$('td.imageFile').live('click', function(e)
    fileWithPath = "uploads/original/" + $(this).text();
    $('#cropbox').remove();
    $("#cropcontainer").empty().html(insertImage(fileWithPath));
);

【问题讨论】:

【参考方案1】:

google一下,我自己解决这个问题。这是可行的解决方案

function insertImage(name) 

  var img = new Image();
  img.id = 'cropbox';
  img.src = name;

  if(img.complete) setTimeout('initJcropBox()', 500);   
  else onload= initJcropBox;  

  return img;
 

【讨论】:

【参考方案2】:

尝试用它替换您的 insertImage(name) 函数。这应该会触发图像上的加载事件,直到它真正加载为止。

function insertImage(name) 
    var img = $('<img id="cropbox" />');
    img.load(function() 
                if (! this.complete) 
                  return false;
                  $(this).load();
                

                else if (typeof this.naturalWidth != 'undefined' && this.naturalWidth == 0) 
                  return false;
                  $(this).load();
                
                else
                  initJcropBox();
             )
        .attr('src',name);
    return img;

我没有测试过,所以让我知道它是否值得。

【讨论】:

【参考方案3】:

前段时间我遇到了类似的问题。使用 load() 加载图像并触发回调函数。 Here 更多详情。

【讨论】:

以上是关于在图像完全加载之前触发图像加载事件?的主要内容,如果未能解决你的问题,请参考以下文章

iPad ios 8.4 中不触发窗口加载事件

iPad ios 8.4 中不触发窗口加载事件

NSURLConnection 在 UITableView 滚动之前不会“触发”

在 iPad 上触发视频加载事件?

JavaScript事件

加载第一张图片后触发 onload 事件