JavaScript 向浏览器拖入图片预览

2019-10-7 23:46| 作者: admin| 查看: 197| 评论: 0|来自: 蚂蚁部落

HTML5提供的拖拽功能不仅能实现文档内元素的拖拽移动效果。

也能实现向浏览器拖拽文件的功能,本文分享一段拖入图片并预览的效果。

代码实例如下:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style type="text/css">
#demo {
  margin: 20px;
}
#demo .preview {
  height: 300px;
  width:300px;
  background: #ddd;
}
#demo li {
  list-style:none;
}
#demo img {
  max-height: 150px;
  width: auto;
}
</style>
<script>
window.onload = () => {
  let preview = document.querySelector('.preview');

  preview.addEventListener('dragover', function (e) {
    e.preventDefault();
  }, false);

  preview.addEventListener('drop', function (e) {
    e.preventDefault();
    e.stopPropagation();
    
    [].forEach.call(e.dataTransfer.files, function (file) {
      if (file && file.type.match('image.*')) {
        let reader = new FileReader();
        reader.onload = function (e) {
          var img = document.createElement('img');
          img.src = e.target.result;
          var li = document.createElement('li');
          li.appendChild(img);
          preview.appendChild(li);
        };
        reader.readAsDataURL(file);
      }
    });
  }, false);
}
</script>
</head>
<body>
  <div id="demo">
    <h3>拖拽图片进入下面区域预览</h3>
    <ul class="preview"></ul>
  </div>
</body>
</html>

上述代码实现了从操作系统拖拽文件至浏览器并预览的效果。

可以一次拖拽一个或者多个图片至指定区域,简单演示截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201910/07/234747dlb47kebog4vl45d.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

对上述代码进行一下简单分析:

[JavaScript] 纯文本查看 复制代码
let preview = document.querySelector('.preview')

获取class属性值为"preview"的元素对象,也就是ul元素对象。

[JavaScript] 纯文本查看 复制代码
preview.addEventListener('dragover', function (e) {
  e.preventDefault();
}, false);

为目标元素ul注册dragover事件处理函数。默认,ul元素是不允许其他元素放置于其上的。

通过e.preventDefault()方法取消浏览器的上述默认行为。

[JavaScript] 纯文本查看 复制代码
preview.addEventListener('drop', function (e) {
  e.preventDefault();
  ev.stopPropagation();
  // 其他代码
}

默认从操作系统向浏览器拖拽文件,会在一个选项卡打开此文件。

通过e.preventDefault()方法阻止浏览器上述默认行为。

火狐浏览器还有点特别,还需要调用ev.stopPropagation()方法。

否则火狐浏览器依然会打开一个新的选项卡。

后面则是利用FileReader对象读取上传文件的相关信息,并动态创建图片追加到ul中。

相关阅读:

(1).querySelector方法参阅querySelector() 方法一章节。

(2).addEventListener方法参阅JavaScript addEventListener()一章节。

(3).forEach方法参阅JavaScript forEach()一章节。

(4).FileReader参阅FileReader教程板块。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部