HTML5项目中实现拖拽文件上传功能的方法是怎样
Admin 2022-06-28 群英技术资讯 833 次浏览
今天这篇给大家分享的知识是“HTML5项目中实现拖拽文件上传功能的方法是怎样”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“HTML5项目中实现拖拽文件上传功能的方法是怎样”文章能帮助大家解决问题。HTML5新增了文件API,提供客户端本地操作文件的可能.
我们可以通过file表单或拖放操作选择文件,还可以通过JavaScript读取文件的名称、大小、类型、和修改时间.
file类型的input表单新增了files属性,保存我们上传文件的信息,如果要实现多文件上传,可以设置input的multiple属性.
可以使用accept属性规定文件上传的MIME类型 例如’image/jpeg’
<form action="#">
<div class="form-group">
<label for="input_1">请选择文件</label>
<input id="input_1" class="form-control" name="input_1" type="file">
</div>
<div class="form-group">
<button id="btn_1" class="btn btn-default" type="button">读取文件信息</button>
</div>
</form>
<pre id="result"></pre>
</div>
<script>
var btn = document.querySelector('#btn_1');
var input = document.querySelector('#input_1');
btn.addEventListener('click', function() {
// 获取文件域中选择的文件
// var file = input.files[0];
var file = input.files.item(0);
if (file) {
result.innerHTML =
'文件名:' + file.name + '\n文件最近修改时间:' + file.lastModifiedDate+ '\n文件类型:' + file.type + '\n文件大小:' + file.size + '字节'
} else {
result.innerHTML = '没有选择任何文件';
}
});
</script>
对于被拖拽的元素,HTML5增加了三个事件用于监听拖拽的过程
<body>
<div id="one" style="width: 300px;height: 300px;border: 1px solid red"></div>
<div id="two" style="width: 100px;height: 100px;border: 1px solid blue" draggable="true"></div>
</body>
<script type="text/javascript">
two.ondragstart = function(e){
// e.preventDefault();
console.log(e);
e.dataTransfer.setData("Text",e.target.id);
console.log(e.dataTransfer.getData("Text",e.target.id));
one.innerHTML = '开始'
}
two.ondrag = function(e){
one.innerHTML += '拖动中'
}
two.ondragend = function(e){
one.innerHTML = '结束'
}
</script>
想要拖拽元素,必须设置draggable属性
页面默认的动作是拖拽后回到原位
在拖动阶段,我们可以存储被拖动元素的属性或者状态到事件对象的dataTransfer中,如果出现跳转,则是浏览器默认的事件被触发,我们需要使用e.preventDefault()来阻止默认事件。
投放区的事件
对于被拖的元素而言,拖向何处则为投放区,投放区的事件如下:
<body>
<div id="one" style="width: 300px;height: 300px;border: 1px solid red"></div>
<div id="two" style="width: 100px;height: 100px;border: 1px solid blue" draggable="true"></div>
</body>
<script type="text/javascript">
one.ondragenter = function(e){
// e.preventDefault();
console.log(e);
one.innerHTML = '开始'
}
one.ondragover = function(e){
one.innerHTML += '拖动中'
}
one.ondragleave = function(e){
one.innerHTML = '结束'
}
</script>
而drop则是监听被拖拽物拖拽到投放区并松开鼠标的事件,他可以接收到dataTransfer中的数据,所以我们的页面内拖拽可以写成如下效果:
<style type="text/css">
*{
box-sizing: border-box;
}
</style>
<body>
<div id="one" style="width: 300px;height: 300px;border: 1px solid red"></div>
<div id="two" style="width: 100px;height: 100px;border: 1px solid blue;display: flex;">
<div style="width: 50px;height: 100px;border:1px solid black;">第一个</div>
<div style="width: 50px;height: 100px;border:1px solid pink;">第二个</div>
</div>
</body>
<script type="text/javascript">
one.ondragover = function(e) {
e.preventDefault();
}
two.onmousedown = function(e){
e.target.draggable = true;
e.target.ondragstart = function(ev) {
ev.dataTransfer.setData("Text", ev.target.innerHTML);
}
e.target.ondragend = function(){
two.removeChild(this)
}
}
one.ondrop = function(e) {
var div = document.createElement('div')
div.style = "width: 50px;height: 100px;border:1px solid black;"
div.innerHTML = e.dataTransfer.getData("Text")
this.appendChild(div)
}
</script>
经过观察,事件对象中的dataTransfer也存在files属性,我们可以用熟悉的方法上传拖拽进来的文件:
<body>
<div id="one" style="width: 300px;height: 300px;border: 1px solid red"></div>
</body>
<script type="text/javascript">
one.ondragover = function(e) {
e.preventDefault();
}
one.ondrop = function(e) {
e.preventDefault()
console.log(e.dataTransfer.files[0]);
}
</script>
然后做Ajax文件上传即可
one.ondrop = function(e) {
e.preventDefault()
var file = e.dataTransfer.files[0];
var formData = new FormData();
formData.append("aa", file);
var xml = new XMLHttpRequest();
xml.open("post", url, false);
xml.send(formData);
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
如何css实现列表展开与收起?下图效果想必大家都有看到过,列表的展开与收起效果在网站设计中还是比较常见的,那么种效果是如何实现的呢?下面我们就来一起学习一下。
在css中,可以利用“:hover”选择器和“background-image”属性实现鼠标滑过改变图片效果,只需要给图片元素添加“图片元素:hover{background-image:url(新的图片路径);”样式即可。
这篇文章主要介绍了利用html+css实现菜单栏缓慢下拉效果的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本篇文章给大家介绍一下CSS3中的逻辑选择器,聊聊里面的 4 名成员,希望对大家有所帮助!
在css中,可以利用ransform和transition属性设置div向上移动,只需要给div元素添加“transform:translateY(-向上移动距离值);transition:all 动画时间 ease-in;”样式即可。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008