html图片拖拽上传
目前用户要通过Web上传一个文件是通过 <input type="file /"> 这个标记。具体过程需要在一个很傻的对话框里定位文件夹 -> 在大量的文件里找到目标文件 -> 确定 -> 点“上传”按钮。我们能不能把这个步骤简化,实现拖拽上传呢?
比如说,
1. 在 资源管理器 里选择一个图片
2. 拖拽到一个网页,比如说一个正在编辑的博客
3. 后台AJXJ自动上传这个图片
4. 在正在编辑的博客的当前位置直接插入并显示图片。
我想用javascript实现。(跟AJAX一样,有一点hack的味道。)
原理很简单。首先用户拖拽一个图片到浏览器,浏览器会自动跳转到这个图片。比如说我拖拽 D:\test\1.jpg 到浏览器,浏览器会跳转当前页面到 file:///D:/test/1.jpg。那么我们要做的就是在浏览器跳转之前:
1. 截获body.onunload事件,并取消浏览器的跳转
2. 获知浏览器将要跳转到的页面
3. 自动填写 <input type="file" />的地址
4. AJAX后台上传图片
5. 把图片插入当前的正在编辑位置。
发这个帖子的目的,想跟大家探讨这个设想的可能性。最后希望得出一个结论:可行,还是不可行。如果可行的话我希望深入探讨出一个固定的模式。(像AJAX那样)
⑵ html拖拽效果怎么实现
<!DOCTYPEHTML>
<html>
<metacharset="UTF-8">
<title>test</title>
<head>
<styletype="text/css">
div{
width:80px;
height:80px;
padding:10px;
margin:10px;
border:1pxsolid#aaaaaa;
}
img{
width:50px;
height:50px;
}
img:hover,
img:active{
width:55px;
height:55px;
}
</style>
<scripttype="text/javascript">
functionallowDrop(ev){
ev.preventDefault();
}
functiondrag(ev){
ev.dataTransfer.setData("Text",ev.target.id);
}
functiondrop(ev){
ev.preventDefault();
vardata=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<h2>请把喵喵拖放到里面:</h2>
<divondrop="散册租drop(event)"ondragover="allowDrop(event)"></div>
<divondrop="drop(event)"ondragover="allowDrop(event)"></div>
<imgid="img"src="http://img6.bdstatic.com/img/image/smallpic/chongwu1124.jpg"alt="赶紧拖动我"title="赶紧拖姿清动我"draggable="true"ondragstart="drag(event)"/>
</body>
</html>
设置元素为可拖放
首先,为了使元素可拖动,把 draggable 属性设置为 true :
<img draggable="true" />
拖动什么 - ondragstart 和 setData()
然后,规定当元素被拖动时,会发生什么。
在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被冲兆拖动的数据。
dataTransfer.setData() 方法设置被拖数据的数据类型和值:
function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}
在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。
放到何处 - ondragover
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
这要通过调用 ondragover 事件的event.preventDefault() 方法:
event.preventDefault()
进行放置 - ondrop
当放置被拖数据时,会发生 drop 事件。
在上面的例子中,ondrop 属性调用了一个函数,drop(event):
function drop(ev)
{
ev.preventDefault();
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
}
代码解释:
调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
被拖数据是被拖元素的 id ("drag1")
把被拖元素追加到放置元素(目标元素)中
⑶ html5拖拽图片上传,怎么获得图片原始尺寸
用后台语言去获取不就可以了。为什么一定要在前端来获取图片原始大小呢?即使你要在前端实用,比如php获取到了以后还是可以通过变量传递给前端的。至于PHP怎么获取图片原始大小这个网上很容易找到资料!
⑷ 怎样用html5实现拖拽上传文件
,首先要判断拖入的文件是否符合要求,包括图片类型、大小等,然后获取本地图片信息,实现预览,最后上传。
$(function(){
...接上部分
var box = document.getElementById('drop_area'); //拖拽区域
box.addEventListener("drop",function(e){
e.preventDefault(); //取消默认浏览器拖拽效果
var fileList = e.dataTransfer.files; //获取文件对象
//检测是否是拖拽文件到页面的操作
if(fileList.length == 0){
return false;
}
//检测文件是不是图片
if(fileList[0].type.indexOf('image') === -1){
alert("您拖的不是图片!");
return false;
}
//拖拉图片到浏览器,可以实现预览功能
var img = window.webkitURL.createObjectURL(fileList[0]);
var filename = fileList[0].name; //图片名称
var filesize = Math.floor((fileList[0].size)/1024);
if(filesize>500){
alert("上传大小不能超过500K.");
return false;
}
var str = "<img src='"+img+"'><p>图片名称:"+filename+"</p><p>大小:"+filesize+"KB</p>";
$("#preview").html(str);
//上传
xhr = new XMLHttpRequest();
xhr.open("post", "upload.php", true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
var fd = new FormData();
fd.append('mypic', fileList[0]);
xhr.send(fd);
},false);
});
⑸ html5 图片上传 可收缩 拖拽
可以参腔睁考chrome小乐图搏扒客扩展的截图功能,支持粘贴剪贴板图片、拖拽图片、或者粘贴图片网址上传,是通基圆昌过html5 file reader实现的。