editormd 支持拖放上传图片和视频

editormd中,有时觉得 点击按钮 => 弹出对话框 => 选择文件这样的上传步骤有些麻烦,要是能支持文件拖放上传,将会是非常不错的用户体验。

实现这个功能,关键点有3个:

    1. 监听并处理editormd编辑区域的拖放(Drag-Drop)事件
    1. 放下文件后,获取到文件,通过Ajax上传至后端
    1. 收到后端返回的视频/图片 url,转换成合适的代码片段,粘贴到编辑器中

这3个部分的功能并不是什么特别新的,拖放事件、Ajax上传文件,以前也处理过了。最后一部分则在前面一篇文章中也讲过了。

1. 监听编辑区的拖放事件

首先我们要找到editormd编辑区域的元素,才能对它进行监听拖放事件。

通过Chrome浏览器调试,发现editormd编辑器的编辑区域是class.CodeMirror-wrap的元素。参考HTML5拖放事件的写法,代码大致如下:

var codeEditor = $(".CodeMirror-wrap")[0];
codeEditor.ondragenter = function(e) {e.preventDefault();e.stopPropagation();console.log("dragenter");return false;
};
codeEditor.ondragover = function(e) {e.preventDefault();e.stopPropagation();console.log("dragover");return false;
};
codeEditor.ondrop = function(e) {e.preventDefault();e.stopPropagation();console.log("drop");var files = e.dataTransfer.files // 这里获取到用户拖放的文件console.log(files);// 其中 ajaxUpload是Ajax上传文件的函数// uploadUrl是后端提供的上传地址, uploadCallback是上传后的回调函数,用于生成代码片段并插入编辑器ajaxUpload(uploadUrl, files, uploadCallback);return false;
};

把这部分代码放在editormd创建后的onload回调函数中,保证$(".CodeMirror-wrap")[0]可以取到值。

2.Ajax上传图片/视频

Ajax上传图片,相信大家已经写过不少了。忘了没关系,这里有代码可以抄。

ajaxUpload函数代码大致如下:

function ajaxUpload(uploadUrl, files, callback) {console.log("my ajax upload begin");var formData = new FormData();formData.append('file', files[0]);// 可以添加其他需要传给后端的参数$.ajax({url: uploadUrl,type: 'POST',data: formData,processData: false, // must, importantconentType: false, // must, importantdataType: 'json',success: function(data) {console.log("result:", data);callback(data);},complete: function(data) {}});return false;
}

3. 生成代码片段,插入编辑器

这部分代码,可以从上一篇文章中借过来。uploadCallback函数的代码大致如下

function uploadCallback(data) {var url = data.data.url; // 依据后端返回的数据格式而定var link = url;if (!url) return false;var alt = "";var cm = myEditormd; // myEditormd是用editormd函数创建的编辑器对象,这里假设myEditor是全局变量var cursor = cm.getCursor(); // 获取光标位置if (url.endsWith(".mp4")) { // 如果是是视频var videoHtml = '<video class="video-js" controls preload="auto" width="100%" poster="" data-setup=\'{"aspectRatio":"16:9"}\'>\
<source src="' + url + '" type=\'video/mp4\' >\
<p class="vjs-no-js">\
To view this video please enable JavaScript\
</p>\
</video>';videoHtml = "\n" + videoHtml + "\n"; // videoHtml是生成的HTML视频代码片段cm.replaceSelection(videoHtml); // 插入到编辑器中cm.setCursor(cursor.line, cursor.ch + 2);return;}// 以下是对图片上传结果的处理,引用原image-upload插件的代码var altAttr = (alt !== "") ? " \"" + alt + "\"" : "";if (link === "" || link === "http://"){cm.replaceSelection("![" + alt + "](" + url + altAttr + ")");}else{cm.replaceSelection("[![" + alt + "](" + url + altAttr + ")](" + link + altAttr + ")");}if (alt === "") {cm.setCursor(cursor.line, cursor.ch + 2);}
}

这样,我们的editormd编辑器支持拖放上传图片和视频了!

4. 其它

上传的时候,如果文件比较大,需要等待一段时间,这时,最好在编辑区域加上一个显示“正在上传”的加载框,上传后关闭之,这样,用户知道发生了什么。

项目中用的是Vue,使用了饿了么的了Element-ui组件,可以用它提供的的$loading方法来显示加载框,在调用ajax方法上传文件之前插入如下代码:

var loading = that.$loading({ // that是vue实例lock: false,text: '上传中...',spinner: 'el-icon-loading',background: 'rgba(0, 0, 0, 0.3)',target: '.CodeMirror-wrap',
});
// 假如下面这行代码是因为Element-ui在编辑区显示的遮罩效果太黑了,而且通过`background`选项调整不过来
$(".el-loading-mask").css({'background-color': 'rgba(0,0,0,0.7)'});

然后在ajaxcomplete'回调中关闭loading

$.ajax({...complete: function() {loading.close();}
});

editormd 支持拖放上传图片和视频相关推荐

  1. 微信pc群发器,支持小程序、视频号、名片、图片、文字等

    简介: 微信pc群fa器,支持小程序.视频号.名片.图片.文字等 网盘下载地址: http://kekewl.cc/DGBxvdDoGSQ0 图片:

  2. 小程序源码:全新动态视频壁纸下载支持多种分类短视频另外也有静态壁纸

    这是一款主打动态视频壁纸的一款微信小程序源码 当然啦,里面也是有静态壁纸的 其实这款小程序也可以说是短视频小程序都可以 该款小程序全采集,另外支持多种流量主 大家应该知道小编之前也发过一款动态壁纸的小 ...

  3. 【小程序源码】视频壁纸支持多种分类短视频另外也有静态壁纸

    这是一款壁纸的微信小程序源码 其实这款小程序也可以说是短视频小程序都可以 该款小程序全采集, 大家应该知道小编之前也发过一款动态壁纸的小程序 不过那款是没有分类的,而这款不一样了,内包含了多种分类 相 ...

  4. 全新动态视频壁纸微信小程序源码下载支持多种分类短视频另外也有静态壁纸

    这是一款主打动态视频壁纸的一款微信小程序源码 当然啦,里面也是有静态壁纸的 其实这款小程序也可以说是短视频小程序都可以 该款小程序全采集, 大家应该知道小编之前也发过一款动态壁纸的小程序 不过那款是没 ...

  5. 微信小程序:全新动态视频壁纸下载支持多种分类短视频另外也有静态壁纸

    这是一款主打动态视频壁纸的一款微信小程序源码 当然啦,里面也是有静态壁纸的 其实这款小程序也可以说是短视频小程序都可以 该款小程序全采集,另外支持多种流量主 大家应该知道小编之前也发过一款动态壁纸的小 ...

  6. 新动态视频壁纸微信小程序源码_支持多种分类短视频-也有静态壁纸

    这是一款主打动态视频壁纸的一款微信小程序源码,当然啦,里面也是有静态壁纸的. 其实这款小程序也可以说是短视频小程序都可以,该款小程序全采集,另外支持多种流量主!! 下载链接: 新动态视频壁纸微信小程序 ...

  7. Vue中使用wangEditor实现自定义上传图片和视频

    之前没用过wangEditor真是一脸懵,做自己没做过的东西总是心里没谱,既然项目已经结束了那来总结一下吧 看着官网的demo发现简单了好多 官网地址:快速开始 | wangEditor 这里可以选自 ...

  8. 七牛云上传图片和视频

    先说本文主要的重点: 七牛云上传图片(包括从相机获取的和从相册获取的)    七牛云上传视频       8.0手机调起相机        都会进行描述    多图片和多视频上传    获取图片后缀 ...

  9. Apicloud——关于上传图片、视频

    相当低劣的一篇整理,简直非人类,继整理了第二篇关于上传图片与视屏: 最近项目最后,需要一个上传图片和视频的功能,找了一些框架和插件,都不太适用. 自己根据需要写了一个 需求: 读取已有图片实现预览-- ...

  10. 视频教程-C++socket网络编程--http服务器(支持php)实战教学视频-C/C++

    C++socket网络编程--http服务器(支持php)实战教学视频 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟仿真, ...

最新文章

  1. Linux的视频编程(V4L2编程)【转】
  2. spring的Aop使用问题
  3. TP5 上传文件 中文乱码问题
  4. 世界最小晶体管问世 栅极长度仅一纳米
  5. 2017年计算机基础知识答题宝典,2017年全国职称计算机考试答题技巧分享
  6. sysstat linux系统性能分析
  7. win7资源管理器从计算机开始,熟练用Win7电脑从Win7资源管理器入门
  8. Java 并发编程(二)对象的公布逸出和线程封闭
  9. ASP.NET读取XML文件
  10. 想练字要怎么选择字体?
  11. 当初为了有机会进大厂,狠心复习了这9门核心知识点,熬夜整理成思维导图送给大家
  12. [PAL规范]SAP HANA PAL 数据处理四分位间距检测Inter-quartile Range Test编程规范IQRTEST...
  13. 如何才能够主动学习,给你 2 点建议!
  14. UOS 安装腾讯会议的踩坑记录
  15. 深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel文档库openpyxl
  16. 抓包分析,一条Linux命令实现路由器自动登录深大校园网认证(Drcom Pt版)
  17. hp服务器不显示错误代码,惠普服务器开启不了
  18. Oracle数据库版本
  19. Android 平台最新资讯(《Google android 入门开发与实战》pdf完整下载)
  20. 随手记:小程序相关知识点

热门文章

  1. android systrace log,Android性能优化之Systrace分析基础
  2. 能耗监控 | FCU1101物联数采网关在电力能效管理系统中的应用
  3. wiki(维基)系统
  4. sequel pro 格式化sql
  5. USB TYPE A B C 引脚定义
  6. 百钱买百鸡问题的最优解法
  7. 学习iOS逆向有什么用?
  8. 雷达模块感应技术,智能照明LED灯的应用,5.8G雷达感应模块
  9. 报文解析_101规约报文格式定义解析
  10. android adb模拟鼠标滚动,adb shell 模拟鼠标导入通讯录