drag-and-drop实现图片浏览器预览_javascript技巧

今天刚试过chrome的drag and drop API,它能非常简单的将本地的图片放到浏览器中进行预览。试想一下当我们把一个文图片拖拽到浏览器里会发生什么事情,你的浏览器试图打开一个新的页面并加载这个图片。现在我不想浏览器这样帮我处理图片,我希望我拖拽的图片能立即放到我预先规定的位置并迅速回显,这就需要javascript中event对象的两个函数stopPropergation()和preventDefault()。前者将会阻止事件的冒泡,后者会阻止浏览器默认的行为。

这里我们定义一个ignoreDrag函数,用以实现上述功能:
Html代码 

var ignoreDrag = function(e){
     e.originalEvent.stopPropagation();
     e.originalEvent.preventDefault();
     }

然后利用jquery绑定事件
Html代码 

$('#drop')
.bind('dragenter',dragenter)
.bind('dragover',dragover)
.bind('drop',drop);

这里最好用jquery去绑定事件,因为jquery帮我们把event对象做了很好的封装,这样我们才能毫无顾忌的使用stopPropagation和preventDefault函数。
同时定义dragover,dragenter事件函数

Html代码 

var dragover = function(e){
     ignoreDrag(e);
   }
   var dragenter = function(e){
     ignoreDrag(e);
   }

这个一定要定义,否则仍然无法阻止浏览器的默认行为。

最后定义drop函数,也就是当我们把图片放到指定位置时触发的函数
Html代码 

var drop = function(e){
    ignoreDrag(e);
    var dt = e.originalEvent.dataTransfer;
    var files = dt.files;
    var fr = new FileReader();
    fr.onload = function(e){
      var image = new Image();
      image.src = e.target.result;
      $('#drop').append(image)
    }
    fr.readAsDataURL(files[0]);
   }

这个函数是整个功能的关键,这里用到了html5的一些特性,dataTransfer和FileReader。
dataTransfer是drop事件的event参数的一个属性,它包含了droped文件的一些信息,通过dataTransfer的files属性可以获得文件的数组,数组中的元素就是droped文件对象,可以通过name,type,size分别获取文件的名字,类型和大小;文件的内容就要用FileReader来读取,FileReader对象的实例拥有4个方法,其中3个用以读取文件,另一个用来中断读取,下面这张表格列出了这些方法以及他们的功能,注意,不论读取成功与否,函数都不会返回读取的结果,结果存取在result属性中:

 readAsText: 该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。

readAsBinaryString: 它将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。

readAsDataURL: 这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URI,Data URI是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。

FileReader还包含一系列的事件模型,如下表所示: 

这里额外在介绍一下drag-and-drop的事件,表格如下:

 

回到正题,通过FileReader的readAsDataURL函数读取图片,同时在FileReader对象上定义onload函数,当图片加载完毕,通过event.target.result获取文件的base64编码的内容,上一个博客我已经讲过data类型的url可以直接写在img标签的src里面,浏览器就会解析,而不用从外部加载,通过这个特性,将获取到的图片内容赋给img标签的src,并将image对象添加到指定区域里,就可以实现所需的功能。

Html代码 

<html>
 <head>
 <meta http-equiv="content-type" content="text/html;charset=utf-8">
  <style type="text/css">
   #drop{
    width:500px;
    height:300px;
    border:1px solid grey;
    line-height:300px;
    text-align:center;
    overflow:auto;
   }
  </style>
  <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
  <script type="text/javascript">
   var ignoreDrag = function(e){
     e.originalEvent.stopPropagation();
     e.originalEvent.preventDefault();
     }
   var dragover = function(e){
     ignoreDrag(e);
   }
   var dragenter = function(e){
     ignoreDrag(e);
   }
   var drop = function(e){
    ignoreDrag(e);
    var dt = e.originalEvent.dataTransfer;
    var files = dt.files;
    var fr = new FileReader();
    fr.onload = function(e){
      var image = new Image();
      image.src = e.target.result;
      $('#drop').append(image)
    }
    fr.readAsDataURL(files[0]);
   }
   $( function(){
     $('#drop').bind('dragenter',dragenter).bind('dragover',dragover).bind('drop',drop);
   });
  </script>
 </head>
 <body>
  <div id="drop" >
  请将图片放到这里!
  </div>
 </body>
</html> 

以上内容就是使用drag-and-drop实现图片浏览器预览的全部内容,希望大家喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索drag_and_drop
drag_drop
javascript drag drop、html5 drag and drop、drag and drop、drag drop、jquery drag and drop,以便于您获取更多的相关知识。

时间: 2024-09-14 11:14:21

drag-and-drop实现图片浏览器预览_javascript技巧的相关文章

JavaScript File API文件上传预览_javascript技巧

对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情,通常我们能做的仅仅是使用<input type="file">标签来上传文件.实现过程是:选取文件的时候value 属性保存了用户指定的文件的名称,表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名.再获取服务器返回的地址,然后做预览. 但是如果有一天我们要上传一个图片,传了图片后预览想换另一张图片,就又得先上传到服务器再预览.在网络比较慢的情况下,这样真的很折腾. 所以我们某些时候需要先预览

js实现纯前端的图片预览_javascript技巧

图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服务器,接着就获取图片路径并赋值到img元素上.先不管文件异步提交的解决方案,就是服务端清理那些临时的预览图片已经增加不少工作量了. 偶然从MDN上找到纯前端图片预览的相关资料,经过整理后记录下来以便日后查阅.  一.准备功夫1──FileReader   FileReader是HTML5的新特性,用于读取Bl

多种方式实现js图片预览_javascript技巧

先贴代码,之后完善: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta n

JavaScript File API实现文件上传预览_javascript技巧

一.概述以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScript 一直是无法访问本地文件的.于是,为了在浏览器中能够实现诸如拖拽并上传本地文件这样的功能,我们就不得不求助于特定浏览器所提供的各种技术了.比如对于 IE,我们需要通过 ActiveX 控件来获取对本地文件的访问能力,而对于 Firefox,同样也要借助插件开发.由于不同浏览器的技术实现不尽相

JS HTML5拖拽上传图片预览_javascript技巧

1.文件API:(File API) file类型的的表单控件选择的每一个文件都是一个file对象,而FileList对象则是这些file对象的集合列表,代表所选择的所有文件.file对象继承于Blob对象,该对象表示二进制原始数据,提供slice方法,可以访问到字节内部的原始数据块.总之,file对象包含与FlieList对象,而file对象继承于Blob对象! 各对象的相关属性关系: FileReader接口: 由图可知:HTML5还提供了FileReader接口:用于将文件读入内存,并读取

js 判断图片是否加载完以及实现图片的预下载_javascript技巧

创建一个Image对象,实现图片的预下载,如果图片已经存在于浏览器缓存,直接调用回调函数,使用onload事件可以判断图片是否加载完成 function loadImage(url, callback) { var img = new Image(); //创建一个Image对象,实现图片的预下载 img.src = url; if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback.call(img); return; // 直接返回,不用再

js实现上传图片及时预览_javascript技巧

本文实例为大家分享了javascript图片预览功能实现的具体代码,供大家参考,具体内容如下 先为大家分享一段关于js图片预览的代码,兼容火狐和谷歌浏览器 /* 案例展示图片预览 */ $(function(){ $("#file0").bind("change",function(){ clickupLoad(); }); }); function clickupLoad(){ var imgObject = document.getElementById('fi

添加、删除HTML结点 &amp;amp; 上传图片预览_javascript技巧

 删除  删除 增加附件 图片预览:

浅谈js图片前端预览之filereader和window.URL.createObjectURL_javascript技巧

浅谈js图片前端预览之filereader和window.URL.createObjectURL //preview img : filereader方式 document.getElementById('imgFile').onchange = function(e){ 5 var ele = document.getElementById('imgFile').files[0]; var fr = new FileReader(); fr.onload = function(ele){ va