本文目的有两个,一、废掉单图上传,二、改造多图上传

大家都知道百度ueditor不是针对vue项目开发的,官方文档提供的源码包里有需要后端配置的接口,but到vue项目就不太好办了,网上有些文章也介绍了如何把这个编辑器整合到vue项目中去,但涉及到图片上传的部分都没用,ueditor.config.js中有个serverUrl配置项,作用就是设置图片上传接口,把后端给的接口填进去,结果是单图无法上传,多图可以上传,这里就是对单图和多图上传进行修改。

一、废掉单图上传

打开ueditor.all.js大概在28464行有一段初始化简单上传插件的ui代码,直接给注释掉就行了

二、改造多图上传

先说说多图上传存在的问题,这里用的是“多图上传” -> “本地上传”,图片上传后不论成功与否都没有删除按钮,如果用户误传了一张图片想删掉都不行,必须把整个弹窗都关掉,如果已经上传了很多张是比较蛋疼的。另一个问题是插件对图片上传接口返回参数有限制,必须是这么写,但后端大佬实在没空改,只能自己动手改源码了。

先来看看怎样给上传的缩略图增加删除按钮:

插件原来是没有这个小叉叉的,改源码需要做到三件事:

a、添加一个小叉叉按钮

b、点击叉叉删掉缩略图UI

c、如果这张图已经上传成功,即使缩略图UI删掉了,点确定还是会插入编辑器中,这里也要处理

如何添加叉叉按钮?

打开“dialogs/image/image.js”文件,大概在738行有个监听上传成功的函数,如下:

红框内的代码就是我添加的删除按钮,css样式这里就不写了,可以自定义,当然这段代码跟你的还有些许不一样,后面再说。这段代码就是根据图片成功与否做的监听,我们在上传成功和失败的情况下都要添加删除按钮。还有一种情况就是选择了图片不上传,这种情况也是应该能删除的,插件已经做了。插件有个addFile函数,作用是 “当有文件添加进来时执行,负责view的创建”,本来是想在这里增加删除按钮的,但会造成选图而不上传情况下的删除按钮重复。

如何实现点击叉叉删除缩略图UI?

我这里是采用事件监听方式实现的,在addFile函数下面增加了一个监听函数,如下:

document.addEventListener("click", function (event) {
var target = event.target.getAttribute("data-hook")
if (target && target.toLowerCase() === 'closeoversizeimg') {
var delNode = event.target.parentNode, parentNode = delNode.parentNode
var imgUrl = $(delNode).find('img').attr("_src")
var imgIndex = 10000000000000
_this.getInsertList().forEach(function (item, index) {
if(item.src.indexOf(imgUrl) > -1) {
imgIndex = index
}
})
_this.imageList.splice(imgIndex, 1) // 删除数据
removeFile(delNode) // 删除UI
}
}, false)

  

这段代码实现了两个功能,删除UI及删除imageList中对应的数据

删除imageList中对应数据的目的,就是防止UI图删除之后,点击确定按钮依然会把图片插入编辑区。

插件有个imageList属性,这个属性中存放的就是即将要插入编辑区的图片。删除这个数据并不是件容易的事,因为缩略图UI和imageList之间没有直接的对应关系,插件本身就没这功能,要命的是vue把图片的src给转成了base64编码,导致我无法直接根据图片地址进行比较,经过试验我采用的方法是这样的。

还是那个监听上传成功的那段代码:

当你选择图片后,插件就会渲染缩略图UI,我的处理方法是上传成功后给img元素增加一个_src属性,这个属性就是后端返回的图片路径,然后把这个路径跟imageList中的数据进行对比,如果一致就删除,你可以往上翻翻,找到那段

document.addEventListener("click", function (event) { // .... })

代码,里面就是这么做的。

最后再顺便说下,插件是根据{state: 'success'},来判断图片是否上传成功的,如果你们后端返回的不是这个,自己改下监听程序即可,就是下面这段代码:

百度ueditor vue项目应用 -- 图片上传源码修改的更多相关文章

  1. 移动端vue项目的图片上传插件

    有一移动端项目,使用的vant-ui.可是vant自带的Uploader似乎不支持一次选择多张图片上传的功能. 于是乎:在https://www.npmjs.com/查找发现找到 vue-upload ...

  2. maven上传源码到私服

    上传源码 项目中采用了分模块的方式构建,直接将maven-source-plugin写到父pom中,尝试了很多次发现源码一直不能上传到私服中,纠结了很长时间才发现原来多模块项目和普通一个项目的配置是有 ...

  3. 深入springMVC源码------文件上传源码解析(下篇)

    在上篇<深入springMVC------文件上传源码解析(上篇) >中,介绍了springmvc文件上传相关.那么本篇呢,将进一步介绍springmvc 上传文件的效率问题. 相信大部分 ...

  4. 关于editor网页编辑器ueditor.config.js 配置图片上传

    最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的 ...

  5. spring mvc:ueditor跨域多图片上传失败解决方案

    公司在开发一个后台系统时需要使用百度的UEditor富文本编辑器,应用的场景如下: UEditor的所有图片.js等静态资源在一个专有的静态服务器上: 图片上传在另外一台服务器上: 因为公司内部会使用 ...

  6. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  7. 用Vue来实现图片上传多种方式

    没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景.假设我们要做一个后台系统添加商品的页面,有一些商品名称.信息等字段,还有需要上传商品轮播图的需求. 我们就以Vue.Element ...

  8. ueditor使用canvas在图片上传前进行压缩

    之前就看到H5使用canvas就可以在前端使用JS压缩图片,这次接到任务要把这个功能嵌入到ueditor里面去,以节省流量,减轻服务器压力. H5使用canvas进行压缩的代码有很多,核心原理就是创建 ...

  9. vue移动端图片上传压缩

    上传压缩方法 import {api} from '../../api/api.js'; import axios from 'axios'; export function imgPreview ( ...

随机推荐

  1. html5中的容器标签和文本标签

    html5中的容器标签和文本标签 html中的容器级标签和文本级标签,css中的块级元素和行内元素是我们常常拿来比较的四个名词(行内块级暂时先不考虑). 容器标签 容器级的标签可以简单的理解为能嵌套其 ...

  2. hdu 1003 Max Sum 最大字段和 dp

    今天看了一上午dp.看不太懂啊.dp确实不简单.今天開始学习dp,搜了杭电的dp46道,慢慢来吧.白书上的写的 又不太具体,先写几道题目再说. .. 题目连接:id=516&page=1&qu ...

  3. 简单的横向ListView实现(version 3.0)

    版本号2仅仅是简单的实现了当手指按下的时候listView的Item向左移动一定的距离,并没有随着手指的左右移动而左右滚动.在这个版本号3.0中将会实现随着手指的移动而滚动的目标:当手指向左移动的时候 ...

  4. javascript创建对象的方法--构造函数模式

    javascript创建对象的方法--构造函数模式 一.总结 构造函数模式作用和不足 1.作用:解决工厂模式不是用new关键字来创建对象的弊端 2.作用:解决工厂模式创建的实例和模型没有内在联系的问题 ...

  5. HDU 4010 Query on The Trees (动态树)(Link-Cut-Tree)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4010 题意; 先给你一棵树,有 \(4\) 种操作: 1.如果 \(x\) 和 \(y\) 不在同一 ...

  6. InstallShield详细制作说明(二)

    四.设置安装的组件Component

  7. Spring学习总结(10)——Spring JMS---三种消息监听器

    消息监听器MessageListener 在spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener.SessionAwareMe ...

  8. COGS——T 1786. 韩信点兵

    http://www.cogs.pro/cogs/problem/problem.php?pid=1786 ★★★   输入文件:HanXin.in   输出文件:HanXin.out   简单对比时 ...

  9. 用VBS控制鼠标,在Excel2010、2013,64位中

    原作者文章地址:http://demon.tw/programming/vbs-control-mouse.html 感谢原作者的攻略.才使我学会用VBS控制鼠标. 但是问题接踵而至,Excel200 ...

  10. [DP]【最大全零矩阵】【2015.7.9TEST】E

    E 0.9 seconds, 32 MB " 于是乎,你至少证明了你智商比金天成高.也就说你证明了你不是低智儿童,不错不错. 然而这次, 我貌似也卡住了,你给我打下手吧. 勇敢的少年啊快去创 ...