• 前端富文本编辑器 vue-html5-editor


    1..项目创建与初始化

    在安装好脚手架的依赖后,要执行 npm install vue-html5-editor -S 来安装这个富文本插件,由于这个富文本插件的图标是依赖font-awesome.css的,所以要cnpm install font-awesome --save安装这个css然后在main.js中引入这个css   import 'font-awesome/css/font-awesome.min.css'

    2.使用vue-html5-editor富文本编辑器

    新建一个common文件夹用于存放我们的工具类js文件,然后将下面的代码copy进去:

    import Vue from 'vue'
    import VueHtml5Editor from 'vue-html5-editor'
    export default function () {
      let opt = {
        // 全局组件名称,使用new VueHtml5Editor(options)时该选项无效
        name: "vue-html5-editor",
        // 是否显示模块名称,开启的话会在工具栏的图标后台直接显示名称
        showModuleName: true,
        // 自定义各个图标的class,默认使用的是font-awesome提供的图标
        icons: {
          text: "fa fa-pencil",
          color: "fa fa-paint-brush",
          font: "fa fa-font",
          align: "fa fa-align-justify",
          list: "fa fa-list",
          link: "fa fa-chain",
          unlink: "fa fa-chain-broken",
          tabulation: "fa fa-table",
          image: "fa fa-file-image-o",
          hr: "fa fa-minus",
          eraser: "fa fa-eraser",
          undo: "fa-undo fa",
          "full-screen": "fa fa-arrows-alt",
          info: "fa fa-info",
        },
        // 配置图片模块
        image: {
          // 文件最大体积,单位字节  
          sizeLimit: 512 * 1024 * 10,
          // 上传参数,默认把图片转为base64而不上传
          // upload config,default null and convert image to base64
          upload: {
            url:null,
            headers:{},
            params: {},
            fieldName:{}
          },
          // 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
          // width和height是文件的最大宽高
          compress: {
             600,
            height: 600,
            quality: 80
          },
          // 响应数据处理,最终返回图片链接
          uploadHandler(responseText){
    //      default accept json data like  {ok:false,msg:"unexpected"} or {ok:true,data:"image url"}
            var json = JSON.parse(responseText);
                    if(json.status == 200){
                        return json.data
                    }else{
                        alert(json.error)
                    }
          }
        },
        // 语言,内建的有英文(en-us)和中文(zh-cn)
        language: "zh-cn",
        // 自定义语言
        i18n: {
          "zh-cn": {
            "align": "对齐方式",
            "image": "图片",
            "list": "列表",
            "link": "链接",
            "unlink": "去除链接",
            "table": "表格",
            "font": "文字",
            "full screen": "全屏",
            "text": "排版",
            "eraser": "格式清除",
            "info": "关于",
            "color": "颜色",
            "please enter a url": "请输入地址",
            "create link": "创建链接",
            "bold": "加粗",
            "italic": "倾斜",
            "underline": "下划线",
            "strike through": "删除线",
            "subscript": "上标",
            "superscript": "下标",
            "heading": "标题",
            "font name": "字体",
            "font size": "文字大小",
            "left justify": "左对齐",
            "center justify": "居中",
            "right justify": "右对齐",
            "ordered list": "有序列表",
            "unordered list": "无序列表",
            "fore color": "前景色",
            "background color": "背景色",
            "row count": "行数",
            "column count": "列数",
            "save": "确定",
            "upload": "上传",
            "progress": "进度",
            "unknown": "未知",
            "please wait": "请稍等",
            "error": "错误",
            "abort": "中断",
            "reset": "重置"
          }
        },
        // 隐藏不想要显示出来的模块
        hiddenModules: [],
        // 自定义要显示的模块,并控制顺序
        visibleModules: [
    //    "text",
    //    "color",
          "font",
          "align",
    //    "list",
    //    "link",
    //    "unlink",
    //    "tabulation",
          "image",
    //    "hr",
    //    "eraser",
          "undo",
    //    "full-screen",
    //    "info",
        ],
        // 扩展模块,具体可以参考examples或查看源码
        // extended modules
        modules: {
          //omit,reference to source code of build-in modules
        }
      };
      Vue.use(VueHtml5Editor, opt);
    }

    接着在main.js中引入这个初始化的函数:

    import initRichText from './common/initHTMLEditor.js'
    import 'font-awesome/css/font-awesome.min.css'

    3.使用组件

    <template>
        <div class="rich-text-test">
            <vue-html5-editor :content="content" :height="400" @change="updateData"></vue-html5-editor>
        </div>
    </template>
    
    <script>
    export default {
        data() {
            return {
                content: ""
            };
        },
        methods: {
            updateData(e = "") {
                let c1 = e.replace(/<img width="100%"/g, "<img");
                let c2 = c1.replace(/<img/g, '<img width="100%"');
                this.content = c2;
                console.log(this.content);
            }
        }
    };
    </script>
    
    <style scoped="scoped">
    .rich-text-test{
        margin-top: 40px;
    }
    </style>
    

    这个height属性是设置内容区的高度,content是内容区的数据内容,@change事件是内容区的监听事件,会在发生变化时触发,该函数接收一个参数,表示当前编辑器中的内容。运行结果如下(这里对图片的操作是转成base64的字符串):

    4.常见问题解决

    (1)自定义工具栏的模块

    如果不想要显示这么多的工具,则只要配置visibleModules即可:

     修改initHTMLEditor.js  中的配置即可

    (2)移动端图片上传样式的处理

    这里我没有配置服务端的上传文件的接口,所以我就直接将图片转成base64的来处理。但是这样会有问题,在PC端图片是可以修改大小的,但是在移动端上传的图片上是原图,也就是很大,图文混排的时候非常不好看,也不好编辑。这时候我做的处理挺投机取巧的,但是也是可行的方法。我们知道change函数是在内容发生变化时触发的,这时候我们只要将获取到的内容做一下修改即可,看代码:

    updateData(e = "") {
        let c1 = e.replace(/<img width="100%"/g, "<img");
         let c2 = c1.replace(/<img/g, '<img width="100%"');
         this.content = c2;
    },    

    这样就可以了。

    (3)图片上传的主要问题

    图片上传的方法这里分两种。

    第一种是默认把图片转为base64而不上传,最后点击发布上传所有。这里有个缺点是如果上传的图片太大而且有多张的话转为base64会很大,会出现因为文件太大上传不过去的情况,所以可以放弃这种方法。

    第二种是在配置文件中(上面说的新建的js中)修改几行代码即可。原理是每上传一张图片,先上传到服务器然后返回一个图片链接地址,至于返回链接地址怎么展示在页面的问题,插件已经为我们封装的很好,直接在下面的uploadHandler函数return返回的链接就可以啦。在做的过程中出现了上传图片失败问题,原因出在接口问题上,这里的接口写成input file上传不是base64的接口就可以。

    // 配置图片模块
        image: {
          // 文件最大体积,单位字节  
          sizeLimit: 512 * 1024 * 10,
          // 上传参数,默认把图片转为base64而不上传
          // upload config,default null and convert image to base64
          upload: {
            url:'图片上传接口地址',
            headers:{},
            params: {},
            fieldName:'file'
          },
          // 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
          // width和height是文件的最大宽高
          compress: {
             600,
            height: 600,
            quality: 80
          },
          // 响应数据处理,最终返回图片链接
          uploadHandler(responseText){
    //      default accept json data like  {ok:false,msg:"unexpected"} or {ok:true,data:"image url"}
            var json = JSON.parse(responseText);
                    if(json.status == 200){
                        return json.data
                    }else{
                        alert(json.error)
                    }
          }
        },
  • 相关阅读:
    《神经网络设计》读书笔记第一章
    <转>How to Encourage Your Child's Interest in Science and Tech
    <转>卷积神经网络是如何学习到平移不变的特征
    卷积神经网络物体检测之感受野大小计算
    神经网络向量化求反向传播梯度
    SSD框架训练自己的数据集
    object detect links
    Computer vision labs
    Deep Learning Blog lists
    YOLO: Real-Time Object Detection
  • 原文地址:https://www.cnblogs.com/wanan-01/p/9878681.html
Copyright © 2020-2023  润新知