vue2+vue-html5-editor完整版使用,包含上传音视频及其他扩展

图:

有空再做补充:

main.js:

  • 图标库:font-awesome
  • 扩展模块modules:此功能扩展性强,添加一个图标,点击图标展示全部自定义,建议复杂的展示可以封装成一个组件再进行插入

import 'font-awesome/scss/font-awesome.scss'
import VueHtml5Editor from 'vue-html5-editor'
var options = {
  name: "vue-html5-editor",
  // 是否显示模块名称,开启的话会在工具栏的图标后台直接显示名称
  showModuleName: false,
  // 自定义各个图标的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",
    info: "fa fa-info",
  },
  // 配置图片模块
  image: {
    // 文件最大体积,单位字节  max file size
    sizeLimit: 512 * 1024,
    // 上传参数,默认把图片转为base64而不上传
    upload: {
      url: null,
      headers: {},
      params: {},
      fieldName: {}
    },
    // 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
    compress: {
      width: 200,
      height: 200,
      quality: 80
    },
    // 响应数据处理,最终返回图片链接
    uploadHandler(response) {
      return response.data
    }
  },
  // 语言,内建的有英文(en-us)和中文(zh-cn)
  language: "zh-cn",
  // 自定义语言
  i18n: {
    "zh-cn": {
      "align": "对齐方式",
      "image": "图片",
      "list": "列表",
      "link": "链接",
      "unlink": "去除链接",
      "table": "表格",
      "font": "文字",
      "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", //表格
    "hr", //分隔线
    "eraser", //格式清除
    "undo", //撤销
    "image",
    "video",
    "audio"
  ],
  // 扩展模块,具体可以参考examples或查看源码
  modules: [{
    name: 'video',
    icon: 'el-icon-video-camera',
    i18n: 'video',
    show: true,
    init: function (editor) {
    },
    //vue component
    dashboard: {
      template: '<div><el-tabs v-model="customForm.activeName"> <el-tab-pane label="添加视频链接" name="first"> <div style="margin-top:10px"> <el-input v-model="customForm.videoLink" placeholder="请输入视频链接" clearable /><el-button type="primary" size="small" style="margin: 20px 0px 0px 0px " @click="insertVideoLink(customForm.videoLink,null)">确认</el-button></div></el-tab-pane><el-tab-pane label="本地视频上传" name="second"><div style="margin-top:10px"><drUploadAli :buttonName.sync="buttonName" :type="typeFileVideo" :fileListUrl.sync="licenseUrlVideo" @upData="uploadSuccessVideo" /></div> </el-tab-pane></el-tabs></div>',
      data: function () {
        return {
          videoUrl: '',
          customForm: {
            videoLink: '',
            activeName: 'first' //标签默认选择
          },
          buttonName: '上传视频',
          typeFileVideo: 'video',
          licenseUrlVideo: [],
        }
      },
      methods: {
        //上传视频-自定义-视频链接
        insertVideoLink(videoLink, poster) {
          if (!videoLink) {
            this.$message.info('视频地址不能为空!')
            return false;
          }
          this.$parent.execCommand('insertHTML', '<br><video class="ql-video video-width" src="' + videoLink + '" autoplay controls x5-video-player-type="h5" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" type="video/mp4">')
          this.customForm.videoLink = ''
        },
        // 上传视频-自定义-回调阿里上传组件
        uploadSuccessVideo() {
          this.$parent.execCommand('insertHTML', '<br><video class="ql-video video-width" src="' + this.licenseUrlVideo[0].url + '" autoplay controls x5-video-player-type="h5" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" type="video/mp4">')
        },
      }
    }
  },{
    name: 'audio',
    icon: 'el-icon-headset',
    i18n: 'audio',
    show: true,
    init: function (editor) {
    },
    //vue component
    dashboard: {
      template: '<div><el-tabs v-model="customForm.activeName"> <el-tab-pane label="添加音频链接" name="first"> <div style="margin-top:10px"> <el-input v-model="customForm.audioLink" placeholder="请输入音频链接" clearable /><el-button type="primary" size="small" style="margin: 20px 0px 0px 0px " @click="insertAudioLink(customForm.audioLink,null)">确认</el-button></div></el-tab-pane><el-tab-pane label="本地音频上传" name="second"><div style="margin-top:10px"><drUploadAli :buttonName.sync="buttonName" :type="typeFileAudio" :fileListUrl.sync="licenseUrlAudio" @upData="uploadSuccessAudio" /></div> </el-tab-pane></el-tabs></div>',
      data: function () {
        return {
          audioUrl: '',
          customForm: {
            audioLink: '',
            activeName: 'first' //标签默认选择
          },
          buttonName: '上传音频',
          typeFileAudio: 'audio',
          licenseUrlAudio: [],
        }
      },
      methods: {
        //上传视频-自定义-视频链接
        insertAudioLink(audioLink, poster) {
          if (!audioLink) {
            this.$message.info('视频地址不能为空!')
            return false;
          }
          this.$parent.execCommand('insertHTML', '<br><audio controls><source class="ql-audio" src="' + audioLink + '" type="audio/mpeg">')
          this.customForm.audioLink = ''
        },
        // 上传视频-自定义-回调阿里上传组件
        uploadSuccessAudio() {
          this.$parent.execCommand('insertHTML', '<br><audio class="ql-audio" src="' + this.licenseUrlAudio[0].url + '" type="audio/mpeg">')
        },
      }
    }
  }]
};
Vue.use(VueHtml5Editor, options);

封装的组件   html5Editor.vue:

<template>
  <div>
    <vue-html5-editor ref="editor" :height="260" :content="contentEditor"
     :auto-height="false" @change="updateData">
    </vue-html5-editor>
  </div>
</template>
<script>
  export default {
    name: "html5Editor",
    props: {
      /* 编辑器的内容 */
      content: {
        type: String,
        default: ""
      },
    },
    data() {
      return {
        contentEditor: '',
        num:1,
      }
    },
    watch:{
      content(newVal, oldVal) {
        if(this.num==1){
        this.contentEditor = newVal
      }
    }
  },
    mounted() {},
    methods: {
      // 更新编辑器内容
      updateData() {
        this.num = 2
        let obj = document.getElementsByClassName("content")[0];
        let html = obj.innerHTML;
        let filterHtml = html.replace(/crossorigin="anonymous"/g, "");
        this.contentEditor = filterHtml;
        // 编辑器封装后,将内容传出去
        this.$emit('update:contentc', filterHtml);
        this.$emit('upData');
      },
    },
  }

</script>
<style>
.vue-html5-editor>.toolbar>ul{
  background: linear-gradient(180deg, #FAFAFA 0%, #E9E9E9 100%);
}
</style>

父组件使用:

<html5Editor:content.sync="form.leftcontent" @upData="upDataleftcontent" />

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BMG-Princess

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值