html拖拽事件 上传,html5使用Drag事件编辑器拖拽上传图片

本文介绍了如何利用FileClipboardData API进行图片粘贴上传,并结合Seajs模块实现了两种功能:通过选择器指定区域的图片拖拽上传和粘贴事件处理。代码实例详细展示了如何将Base64编码的图片上传到服务器并插入编辑器中。

使用场景

图片的拖拽指定区域进行上传

图片粘贴进行上传功能

核心api参考

File

clipboardData

案例代码

Seajs 定义Tools模块

/**

* Created by zhaojunlike on 8/22/2017.

*/

define(function (require, exports, module) {

/**

* 截图粘贴

* @param selector

* @param callback

*/

exports.paste = function (selector, callback) {

document.querySelector(selector).addEventListener("paste", function (ev) {

var data = ev.clipboardData;

var items = (event.clipboardData || event.originalEvent.clipboardData).items;

for (var i in items) {

var item = items[i];

//如果是图片

if (item.kind === 'file' && item.type.indexOf('image') > -1) {

var blob = item.getAsFile();

var reader = new FileReader();

//reader读取完成后,xhr上传

reader.onload = function (event) {

var base64 = event.target.result;

//ajax上传图片

//返回一个base64数据

var img = {type: item.type, kind: item.kind};

if (typeof callback === "function") {

callback(event.target.result, img, event);

}

}; // data url!

reader.readAsDataURL(blob);//reader

}

}

});

};

/**

* 拖拽上传

* @param selector

* @param callback

*/

exports.drag = function (selector, callback) {

var element = document.querySelector(selector);

element.addEventListener("drop", function (e) {

e.preventDefault();

var files = e.dataTransfer.files;

for (var i = 0; i < files.length; i++) {

//回调文件

//alert("Drop " + file[i].name.toString());

var reader = new FileReader();

var item = files[i];

reader.onload = function (event) {

var base64 = event.target.result;

//返回一个base64数据

var img = {type: item.type, name: item.name};

if (typeof callback === "function") {

callback(event.target.result, img, event);

}

};

reader.readAsDataURL(files[i]);//reader

}

return false;

});

element.addEventListener("dragenter", function (e) {

e.stopPropagation();

e.preventDefault();

});

element.addEventListener("dragover", function (e) {

e.dataTransfer.dropEffect = "copy";

e.stopPropagation();

e.preventDefault();

});

document.body.addEventListener("dragover", function (e) {

e.stopPropagation();

e.preventDefault();

return false;

});

}

/**

* 解析粘贴过来的内容,看是否有不是本站的图片,解析出来上传到本站

*/

exports.parseImg = function () {

}

});

使用方法:

//粘贴上传图片

Edtools.paste("#post_content", function (base64, image, event) {

$.post("{:url('api/uploader/upEditorImg')}",{base:base64}, function (ret) {

layer.msg(ret.msg);

if (ret.code === 1) {

//新一行的图片显示

editor.insertValue("\n![" + ret.data.title + "](" + ret.data.path + ")");

}

});

});

//拖拽上传图片

Edtools.drag("#post_content", function (base64, image, event) {

$.post("{:url('api/uploader/upEditorImg')}",{base:base64}, function (ret) {

layer.msg(ret.msg);

if (ret.code === 1) {

//新一行的图片显示

editor.insertValue("\n![" + ret.data.title + "](" + ret.data.path + ")");

}

});

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值