将图像拖放到网页中并使用HTML File API自动调整大小

问题描述 投票:3回答:2

我想创建允许用户将图像拖放到页面各个部分的框中的网页,以便他们可以使用图像打印页面。

我希望图像在框中掉落时自动调整大小。我将http://html5demos.com/file-api的一些代码与http://html5demos.com/file-api-simple中的一些代码结合起来得到了我想要的东西。

在当前版本的代码(下面)中,图像宽度不会在您第一次将图像放入框中时调整大小,但它会在第二次执行时调整大小。

任何建议如何在第一次将图像放入框中时自动调整图像宽度?

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset=utf-8 />
<meta name="viewport" content="width=620" />
<title>HTML5 Test</title>
</head>
<body>
<header>
      <h1>HTML5 Test 1</h1>
</header>
<style>
   #holder { border: 10px dashed #ccc; width: 300px; height: 300px; margin: 20px auto;}
   #holder.hover { border: 10px dashed #333; }
</style>
<article>
  <div id="holder"></div> 
  <p id="status">File API & FileReader API not supported</p>
  <p>Drag an image from your desktop on to the drop zone above to see the browser read   the contents of the file - without uploading the file to any servers.</p>
</article>
<script>
var holder = document.getElementById('holder'),
    state = document.getElementById('status');

if (typeof window.FileReader === 'undefined') {
  state.className = 'fail';
} else {
  state.className = 'success';
  state.innerHTML = 'File API & FileReader available';
}

holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
  this.className = '';
  e.stopPropagation();
  e.preventDefault();

  var file = e.dataTransfer.files[0],
      reader = new FileReader();
  reader.onload = function (event) {
    var img = new Image();
    img.src = event.target.result;
    // note: no onload required since we've got the dataurl...I think! :)
    if (img.width > 300) { // holder width
      img.width = 300;
  }
  holder.innerHTML = '';
  holder.appendChild(img);
  };
  reader.readAsDataURL(file);

  return false;
};
</script>

</body>
</html>
html5 drag-and-drop resize
2个回答
0
投票

是的。使用这个人的来源:

http://imgscalr.com/


0
投票

基于http://demos.hacks.mozilla.org/openweb/DnD/dropbox.css用于http://demos.hacks.mozilla.org/openweb/DnD/的一些CSS,我找到了一个简单的答案,我认为它非常适合我的需求。

在我上面的问题中包含的代码中,我将其添加到CSS代码中:

   #holder > * {
    display: block;
    margin: auto;
    max-width: 300px;
    max-height: 300px;
}

我删除了这个:

    if (img.width > 300) { // holder width
      img.width = 300;
  }
© www.soinside.com 2019 - 2024. All rights reserved.