image onload事件在其图像完全加载之前触发?
我正在使用Jcrop jquery插件,并在onload事件上触发initJcropBox()
函数。
但是在图像完全加载之前会触发此function。 这引起了问题。 例如显示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)); });
只是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; }
尝试用它替换你的insertImage(name)
函数。 这应该触发图像上的加载事件,直到它真正加载为止。
function insertImage(name) { var img = $(''); 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; }
我没有测试过,所以让我知道它是否值得。
前段时间我有类似的问题。 使用load()加载图像并触发回调函数。 这里有更多细节。