javascript - 如何确保图像已完全加载到 DOM 中

标签 javascript jquery html jcrop image-loading

我正在将裁剪工具集成到我的应用程序中。 (Jcrop)

我将以下 JavaScript 集成到页面中:

$(function() {
  $("#imgInp").change(function(){
    readURL(this);
  });
});

function update_crop(coords) {
  var rx = 100/coords.w;
  var ry = 100/coords.h;
  $('#preview').css({
    width: Math.round(rx * 760) + 'px',
    height: Math.round(ry * 1000) + 'px',
    marginLeft: '-' + Math.round(rx * coords.x) + 'px',
    marginTop: '-' + Math.round(ry * coords.y) + 'px'
  });
}

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    reader.onload = function (e) {
      $('#cropbox').attr('src', e.target.result);
      $('#preview').attr('src', e.target.result);
      $('#cropbox').Jcrop({
        onChange: update_crop,
        onSelect: update_crop,
        setSelect: [0, 0, 500, 500],
        aspectRatio: 10 / 13.15
      });

    }
    reader.readAsDataURL(input.files[0]);
 }

}

在我的 HTML 中,我有以下内容:

<h1>Image to load</h1>
<form id="form1" runat="server">
  <input type='file' id="imgInp" />
</form>

<img id="cropbox" src="#" alt="your image">
<h4>Preview:</h4>
<div style="width:100px; height:100px; overflow:hidden">
  <img id="preview" src="#" alt="your image">
</div>

所以基本上我让用户可以上传图片,然后让他可视化要裁剪的区域。

问题是,当我加载第一张图片时,它很好,但是当我第二次加载另一张图片时,它在 img#cropbox 元素中没有改变。

所以基本上 $('#cropbox').Jcrop 事件是在浏览器更改 $("#cropbox").attr('src',e.target.结果)

如何确保仅当 $("#cropbox").attr('src',e.target. result) 被执行并且图像已完全加载?

最佳答案

图像元素也有一个加载事件。在设置 src 属性之前,将该函数包装在该图像上的加载事件回调中。

$('#cropbox').load(function(){
    $('#cropbox').Jcrop({
      onChange: update_crop,
      onSelect: update_crop,
      setSelect: [0, 0, 500, 500],
      aspectRatio: 10 / 13.15
    });
});
$('#cropbox').attr('src', e.target.result);

关于javascript - 如何确保图像已完全加载到 DOM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161889/

相关文章:

jquery - 返回时触发 jquery 函数

javascript - 使用 Javascript 通过 Adob​​e Air App 访问 Sharepoint 2007

html - 如何在使用 css/js 旋转后定位/调整图像大小,以便图像不会定位在持有它的 div 之外或被裁剪掉

javascript - 使用 javascript/coffeescript 的依赖注入(inject)以帮助可测试性

javascript - 如何使用 dc.js 创建多线图表

javascript - 验证文本区域中逗号分隔单词的字符数

javascript - 访问具有哈希值的页面时导航栏不固定,例如 (example.com#footer)

html - Div 之间无法解释的空间

javascript - react -服务器端渲染

javascript - 调用数组中不存在的元素,大大降低性能