这篇文章主要介绍了Vue如何实现微信小程序的图文编辑器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站制作、外贸营销网站建设、宁阳网络推广、小程序制作、宁阳网络营销、宁阳企业策划、宁阳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供宁阳建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
为什么要使用Vue
Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可维护性和可测试性更强的代码库,Vue允许可以将一个网页分割成可复用的组件,每个组件都包含属于自己的HTML、CSS、JavaScript,以用来渲染网页中相应的地方,所以越来越多的前端开发者使用vue。
由于微信小程序不能使用常规的图文编辑器(比如百度的UEditor )编辑新闻内容之类的,所以用vue写了个针对小程序用的图文编辑器。效果如下

多图上传图片用到了 ajaxfileupload.js (不知道哪位仁兄写的,拿来用了,很好用)
最终形成一串Json数据(转成字符串,传入后台存入数据库,小程序端用JSON.parse 转成JSON ,按照后台一样的方式渲染即可【小程序端代码还没写,后面再贴出来吧】)
json格式如
[{"mytype":1,"content":"测试数据\n\n11111\n\n","font":{"size":0,"weight":1,"del":1,"line":0,"center":1,"color":"#ED1C24","bgcolor":"#fff","showcolor":0}},{"mytype":3,"content":""},{"mytype":2,"content":"/upload/dyProductImgs/20180725/9841925131090216.jpg_E500_100.jpg","loading":1,"groupid":"627459ec-d372-e372-218e-b93b83cb2d02"},{"mytype":2,"content":"/upload/dyProductImgs/20180725/1574162212592205.jpg_E500_100.jpg","loading":1,"groupid":"627459ec-d372-e372-218e-b93b83cb2d02"},{"mytype":2,"content":"/upload/dyProductImgs/20180725/8745023656415428.jpg_E500_100.jpg","loading":1,"groupid":"627459ec-d372-e372-218e-b93b83cb2d02"},{"mytype":2,"content":"/upload/dyProductImgs/20180725/7027501123579481.jpg_E500_100.jpg","loading":1,"groupid":"627459ec-d372-e372-218e-b93b83cb2d02"}] html代码
![]()
![]()
A字体颜色字体颜色代码![]()
![]()
js 代码
需要引用 jquery、vue、ajaxfileupload
var pageData = {
editorData: [],
colors: [
"#000",
"#7F7F7F",
"#880015",
"#ED1C24",
"#FF7F27",
"#FFF200",
"#22B14C",
"#3F48CC",
"#E36C09",
"#31859B",
"#5F497A",
"#76923C",
"#953734",
"#366092",
"#938953",
"#fff"
],
reload:true
};
//初始化vue
var vmMenu = new Vue({
el: '.vue-container',
data: pageData,
methods: {
//生成一个fileid
buildfileid: function (index) {
return "file" + index;
},
initstyle: function (font) {
var stylestr = "";
var fontsize = 18;
fontsize += font.size * 3;
stylestr += "font-size: " + fontsize + "px;"
if (font.weight == 1) stylestr += "font-weight: bold;"
if (font.del == 1) stylestr += "text-decoration:line-through;"
if (font.line == 1) stylestr += "text-decoration:underline;"
if (font.center == 1) stylestr += "text-align: center;"
if (font.color) stylestr += ("color:" + font.color + ";");
if (font.bgcolor) stylestr += ("display: inline;background-color:" + font.bgcolor + ";");
return stylestr;
},
//字体的颜色
initfontcolor: function (font) {
var result = "";
result += "color:";
result += font.color;
result += ";";
result += "background-color:";
result += font.bgcolor;
result += ";";
return result;
},
//字体背景的颜色
initbgcolor: function (color) {
return "background-color:" + color;
},
//加粗或者取消嘉措
fontweight: function (index) {
pageData.editorData[index].font.weight = (pageData.editorData[index].font.weight == 1 ? 0 : 1);
},
//字体加大
fontda: function (index) {
pageData.editorData[index].font.size++;
},
//字体减小
fontxiao: function (index) {
pageData.editorData[index].font.size--;
},
//删除线
fontdel: function (index) {
pageData.editorData[index].font.del = (pageData.editorData[index].font.del == 1 ? 0 : 1);
},
//下划线
fontline: function (index) {
pageData.editorData[index].font.line = (pageData.editorData[index].font.line == 1 ? 0 : 1);
},
//居中显示
fontcenter: function (index) {
pageData.editorData[index].font.center = (pageData.editorData[index].font.center == 1 ? 0 : 1);
},
fontshowcolor: function (index) {
pageData.editorData[index].font.showcolor = (pageData.editorData[index].font.showcolor == 1 ? 0 : 1);
},
//选择字体颜色
fontsetcolor: function (index, color) {
pageData.editorData[index].font.color = color;
this.hidecolorbox(index);
},
//隐藏颜色选择框
hidecolorbox: function (index) {
if (pageData.editorData && pageData.editorData.length > index && pageData.editorData[index].mytype == 1)
pageData.editorData[index].font.showcolor = 0;
},
//上传图片
uploadfile: function (index) {
//用于强制重新渲染 input.file 用于清空之前的文件 ^_^
pageData.reload = false;
//添加一个组ID,方便后面上传完成后识别应该更新哪条数据
var groupid = guid();
var that = this;
var fileid = "file" + index;
var files = $("#" + fileid)[0].files;
for (var i = 0; i < files.length; i++) {
that.itemadd(index + i, 2, groupid);
}
jQuery.ajaxFileUpload({
url: '@Url.Content("~/img/uploadproductdpicArray?path=dyProductImgs")', //用于文件上传的服务器端请求地址
secureuri: false, //是否需要安全协议,一般设置为false
fileElementId: fileid, //文件上传域的ID
dataType: 'json', //返回值类型 一般设置为json
success: function (data) //服务器成功响应处理函数
{
//var result = JSON.parse(data);
pageData.reload = true;
var result = data;
console.log(result);
if (result.resultState == "1") {
var j = 0;
for (var i = 0; i < pageData.editorData.length; i++) {
if (pageData.editorData[i].groupid && pageData.editorData[i].groupid == groupid) {
pageData.editorData[i].content = "@Url.Content("~")" + result.Data[j].substring(1);
pageData.editorData[i].loading = 1;
j++;
}
}
console.log(result);
}
else alert("上传失败!");
},
error: function (data)//服务器响应失败处理函数
{
alert("上传失败!");
}
});
},
//上升模块
itemup: function (index) {
if (index > 0) {
var itemData = pageData.editorData[index];
pageData.editorData.splice(index, 1);
pageData.editorData.splice(index - 1, 0, itemData);
}
},
//下降模块
itembottom: function (index) {
if (index + 1 < pageData.editorData.length) {
var itemData = pageData.editorData[index];
pageData.editorData.splice(index, 1);
pageData.editorData.splice(index + 1, 0, itemData);
}
},
//删除模块
itemdel: function (index) {
pageData.editorData.splice(index, 1);
},
//添加一个新的模块
itemadd: function (index, type, groupid) {
var itemData = null;
switch (type) {
case 1:
itemData = {
mytype: 1,
content: "",
font: {
size: 0, //字体大小 每+1 字体+2px -1同减
weight: 0, //是否加粗
del: 0, //是否删除线
line: 0, //是否下划线
center: 0, //是否居中
color: "#000", //字体颜色
bgcolor: "#fff", //字体颜色
showcolor: 0 //是否显示颜色选择框
}
};
break;
case 2:
itemData = {
mytype: 2,
content: "res/img/1.jpg",
loading: 0 //是否已经成功上传
};
break;
case 3:
itemData = {
mytype: 3,
content: ""
};
break;
default:
alert('暂不支持');
break;
}
if (itemData) {
if (groupid) itemData.groupid = groupid;
pageData.editorData.splice(index, 0, itemData);
}
},
//一个用于阻止冒泡的事件
stopclick: function () { },
},
//实例被调用后
created: function () {
},
//el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
updated: function () {
this.$nextTick(function () {
////console.log(pageData);
//var files = this.$refs.feedbakcImg;
//for (var i = 0; i < files.length; i++) {
// files[i].clearFiles();
//}
})
}
});后台代码 .net (有些方法没有放出来,后面我有时间整理一个单独的demo出来放到云盘)
////// 批量上传商品详情图片 /// ///[HttpPost] public ContentResult uploadproductdpicArray(string path) { rData > result = new rData
>(); result = UpLoadPicArray(path); if (result.resultState == 1) for (int i = 0; i < result.Data.Count; i++) { if (ST.Tool.ImageHelp.GetImageSuffix(result.Data[i]) != ".gif") { string imgPath = Server.MapPath($"~{result.Data[i]}"); string imgPathNoSuffix = imgPath.Substring(0, imgPath.LastIndexOf(".")); string imgSuffix = ST.Tool.ImageHelp.GetImageSuffix(imgPath); Image oldimg = Image.FromFile(imgPath); //读取图片 //压缩宽度为500的图片,等比 清晰度 100 ST.Tool.ImageHelp.PicThumbnail(oldimg, imgPath + "_E500_100" + imgSuffix, 500, 0, 100); oldimg.Dispose(); result.Data[i] = result.Data[i] + "_E500_100" + imgSuffix; } } var jsonResult = JsonConvert.SerializeObject(result); return new ContentResult() { Content = jsonResult }; } ///
/// 上传图片 /// /// 保存图片的文件夹名称 ///保存结果 private rDataUpLoadPic(string _path="public") { rData result = new rData (); HttpFileCollectionBase _file = Request.Files; if (_file.Count > 0) { long size = _file[0].ContentLength; string type = _file[0].ContentType; string name = _file[0].FileName; //文件格式 string _tp = Path.GetExtension(name); if (_tp.ToLower() == ".jpg" || _tp.ToLower() == ".jpeg" || _tp.ToLower() == ".gif" || _tp.ToLower() == ".png" || _tp.ToLower() == ".swf") { Stream stream = _file[0].InputStream; Image image = Image.FromStream(stream); string dateDir = DateTime.Now.ToString("yyyyMMdd"); string saveName = ST.Tool.ExpandString.GetNonceNumberT(16) + _tp; string filePath = $"{BaseConfig.headpath}{_path}/{dateDir}/"; string path = Server.MapPath(filePath); if (!Directory.Exists(path)) Directory.CreateDirectory(path); //_file[0].SaveAs(Server.MapPath($"{filePath}{saveName}")); //初始化图片对象 //Image image = new Bitmap(Server.MapPath($"{filePath}{saveName}")); foreach (var p in image.PropertyItems) { if (p.Id == 0x112) { var rft = p.Value[0] == 6 ? RotateFlipType.Rotate90FlipNone : p.Value[0] == 3 ? RotateFlipType.Rotate180FlipNone : p.Value[0] == 8 ? RotateFlipType.Rotate270FlipNone : p.Value[0] == 1 ? RotateFlipType.RotateNoneFlipNone : RotateFlipType.RotateNoneFlipNone; p.Value[0] = 0; //旋转属性值设置为不旋转 image.SetPropertyItem(p); //回拷进图片流 image.RotateFlip(rft); } } //重新保存为正常的图片 image.Save(Server.MapPath($"{filePath}{saveName}")); result.Data = $"{filePath}{saveName}"; } else result.errorMsg = "只能上传图片。"; } else result.errorMsg = "未选择文件"; return result; } /// /// 上传多张图片 /// /// ///private rData > UpLoadPicArray(string _path = "public") { rData
> result = new rData
>(); result.Data = new List
(); HttpFileCollectionBase _file = Request.Files; if (_file.Count > 0) for (int i = 0; i < _file.Count; i++) { //Thread.Sleep(500); long size = _file[i].ContentLength; string type = _file[i].ContentType; string name = _file[i].FileName; //文件格式 string _tp = Path.GetExtension(name); if (_tp.ToLower() == ".jpg" || _tp.ToLower() == ".jpeg" || _tp.ToLower() == ".gif" || _tp.ToLower() == ".png" || _tp.ToLower() == ".swf") { Stream stream = _file[i].InputStream; Image image = Image.FromStream(stream); string dateDir = DateTime.Now.ToString("yyyyMMdd"); string saveName = ST.Tool.ExpandString.GetNonceNumberT(16) + _tp; string filePath = $"{BaseConfig.headpath}{_path}/{dateDir}/"; string path = Server.MapPath(filePath); if (!Directory.Exists(path)) Directory.CreateDirectory(path); //_file[0].SaveAs(Server.MapPath($"{filePath}{saveName}")); //初始化图片对象 //Image image = new Bitmap(Server.MapPath($"{filePath}{saveName}")); foreach (var p in image.PropertyItems) { if (p.Id == 0x112) { var rft = p.Value[0] == 6 ? RotateFlipType.Rotate90FlipNone : p.Value[0] == 3 ? RotateFlipType.Rotate180FlipNone : p.Value[0] == 8 ? RotateFlipType.Rotate270FlipNone : p.Value[0] == 1 ? RotateFlipType.RotateNoneFlipNone : RotateFlipType.RotateNoneFlipNone; p.Value[0] = 0; //旋转属性值设置为不旋转 image.SetPropertyItem(p); //回拷进图片流 image.RotateFlip(rft); } } //重新保存为正常的图片 image.Save(Server.MapPath($"{filePath}{saveName}")); result.Data.Add($"{filePath}{saveName}"); //result.Data = $"{filePath}{saveName}"; } else result.errorMsg = "只能上传图片。"; } else result.errorMsg = "未选择文件"; return result; }
感谢你能够认真阅读完这篇文章,希望小编分享的“Vue如何实现微信小程序的图文编辑器”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!
分享题目:Vue如何实现微信小程序的图文编辑器
分享路径:http://www.jxjierui.cn/article/pocodj.html


咨询
建站咨询
