js笔记 demo篇 (四)拖拽上传展示,进度条

26 篇文章 0 订阅
20 篇文章 1 订阅
最近忙的懵逼,又很久没更新了,忙里偷闲更一篇。

h5: 拖拽接口

在h5中提供了很多接口,其中就有拖拽,这里只介绍拖拽上传用得到的几个:

dragenter    --> 进入元素范围时触发
dragleave    --> 离开元素范围时触发
dragover      --> 悬浮在元素上时触发(持续触发)
drop             --> 在元素上松开拖拽(拖拽完成)
// 需要注意的是,官方建议用addEventListener绑定事件
document.addEventListener('dragenter', function () {
	console.log('dragenter');
}, false);

document.addEventListener('dragleave', function () {
	console.log('dragleave');
}, false);
//在拖拽读取文件 dragover要阻止默认事件 否则drop没法触发
document.addEventListener('dragover', function () {
	console.log('dragover');
}, false);
//在拖拽读取文件 drop事件也需要阻止默认事件 否则文件会被浏览器读取
document.addEventListener('drop', function () {
	console.log('drop');
}, false);

drop事件默认可以接收一个参数这个参数中可以接受文件信息,当在指定区域内松开文件,触发drop事件就可以读取到文件信息:

document.addEventListener('dragenter', function () {
	console.log('进入区域');
}, false);

document.addEventListener('dragleave', function () {
     console.log('离开区域');
}, false);
document.addEventListener('dragover', function () {
	console.log('松手上传');
}, false);
// ev.dataTransfer.files 是有文件信息的类数组
oDrag.addEventListener('drop', function (ev) {
	console.log(ev)
}, false);

ok搞明白了拖拽怎么接收到文件,接下来就是上传。

ajax获取上传进度

ajax用的是XMLHttpRequest构造函数(这里指的是现在的主流,别抬杠),它上面有很多对象和事件,其中获取上传进度的是upload对象上的progress事件,注意最好也用addEventListener绑定事件。那么简单封装一下呢,(ps:js库中也有获取进度的方法,不在今天研究范围之内)

function ajax(type, url, data, callback) {
            var xhr;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            } else {
                xhr = new ActiveXObject('Microsoft.XMLHttp');
            }
            type = type.toUpperCase()
            xhr.upload.addEventListener("progress", uploadProgress, false);
            if (type == 'GET') {
                xhr.open(type, url + '?' + data, true);
                xhr.send();
            } else if (type == 'POST') {
                xhr.open(type, url, true);
                xhr.send(data);
            }
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    callback(xhr.responseText);
                }
            }
        }

估计大家发现了我没有设置header,这里注意了用ajax上传文件时不要设置header这个大天坑困扰我很久。。。
ok用这个写个小demo喽,后台的代码在这里就不介绍了, 用的是nodejs+express+multer实现的上传。下附git地址与展示地址(ps:样式不是很好看毕竟不是设计出身写的也仓促。。。嘻嘻):

gitHub地址,clone后node sever.js
demo展示地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值