当前位置: 首页 > article >正文

tinymce扩展功能:1、行高、段落间距、格式刷;2、视频上传进度条;3、对复制的图片设置尺寸

tinymce扩展功能:1、行高、段落间距、格式刷;2、视频上传进度条;3、对复制的图片设置尺寸

  • 一、需求描述
  • 二、行高、段落间距、格式刷插件
  • 三、实现视频上传的进度条、对复制的图片设置尺寸

一、需求描述

使用技术:

vue2 + tinymce5.4.1

实现效果图:
一、扩展插件:
在这里插入图片描述
二、视频上传进度条
在这里插入图片描述

二、行高、段落间距、格式刷插件

下载引入相关扩展插件,可以放在components目录下
在这里插入图片描述

import '@/components/tinymcePlugins/importword'// 导入Word
import '@/components/tinymcePlugins/paragraphspacing' //段落间距
import '@/components/tinymcePlugins/formatpainter' //格式刷
import '@/components/tinymcePlugins/lineheight' //行高

pluginstoolbar中引入

plugins: 'importword formatpainter paragraphspacing lineheight'
toolbar: 'importword formatpainter paragraphspacing lineheight'

三、实现视频上传的进度条、对复制的图片设置尺寸

1、DOM:

<editor v-if="!reloading" v-model="myValue" :init="init" :disabled="disabled" @onClick="onClick"> </editor>
<a-modal v-model="progressShow" title="上传进度" :zIndex="1500" :closable="false" :footer="null" :mask="false">
  <a-progress :percent="uploadProgress" status="active"></a-progress>
</a-modal>

2、data:

progressShow: false,
uploadProgress: 0,

3、computed:

  computed: {
    init() {
      let that = this
      return {
      	// ......
        // 省略了其他的基础配置
        file_picker_types: 'file image media',  //分别对应三个类型文件的上传:link插件,image和axupimgs插件,media插件。
        file_picker_callback: function (callback, value, meta) {
          that.uploadProgress = 0
          let filetype;
          // 上传视频
          if (meta.filetype === "media") {
            filetype='.mp4, ‌.avi‌, .mpg, .mpeg‌, .wmv, ‌.mov‌, ‌.flv‌, .swf‌, ‌.rm‌, ‌.ram, ‌.mkv‌';  //限制文件的上传类型
          }
          // 上传图片
          else if (meta.filetype === "image") {
            filetype='.jpg, .jpeg, .png, .svg, .webp, .tif, .tiff, .gif, .raw';
          }
          // 上传文件
          else if (meta.filetype === "file") {
            filetype='.pdf, .txt, .zip, .rar, .doc, .docx, .xls, .xlsx, .ppt, .pptx';  //限制文件的上传类型
          }
          let input = document.createElement("input");
          input.setAttribute("type", "file");
          input.setAttribute('accept', filetype);
          input.onchange = function () {
            let file = this.files[0];
            let fd = new FormData();
            fd.append("file", file);
            fd.append('biz', "jeditor");
            fd.append("jeditor","1");
            // 视频、文件上传,显示进度条
            if (meta.filetype === "media" || meta.filetype === "file") {
              axios.post("/minio/upload", fd, {
                // 主要是这里,获取实时的上传进度
                onUploadProgress: progressEvent => {
                  that.progressShow = true;
                  that.uploadProgress = parseInt(Math.round((progressEvent.loaded * 100) / progressEvent.total));
                },
              }).then(res => {
                that.progressShow = false;
                if (meta.filetype === "file") {
                  callback(res.url, {text: file.name});
                } else {
                  callback(res.url);
                }
              }).catch(err => {
                that.progressShow = false;
              })
            }
            // 图片上传
            else {
              uploadAction("/minio/upload", fd).then((res) => {
                callback(res.url, {alt: file.name});
              });
            }
          };
          input.click();
        },
        setup: function (editor) {
          // 给复制粘贴而来的图片设置尺寸
          editor.on('paste', function (e) {
            setTimeout(() => {
              // 遍历所有粘贴的图片元素
              const imageDoms = editor.getBody().getElementsByTagName('img')
              for (let i = 0; i < imageDoms.length; i++) {
                imageDoms[i].width = imageDoms[i].naturalWidth
                imageDoms[i].height = imageDoms[i].naturalHeight
              }
            }, 100)
          });
        }
      }
    },
  },

http://www.kler.cn/a/384199.html

相关文章:

  • 【自学笔记】神经网络(1)
  • vscode翻译插件
  • 默认 iOS 设置使已锁定的 iPhone 容易受到攻击
  • 【vue2.7.16系列】手把手教你搭建后台系统__登录使用状态管理(15)
  • vue组件在项目中的常用业务逻辑(2)
  • 立冬到了,选择Codigger暖心陪伴
  • 【Axure高保真原型】2级下钻条形图
  • 沈阳乐晟睿浩科技有限公司抖音小店强者之路
  • 跨境云专线:构建高速、安全的全球业务网络
  • k8s之Kruise Rollouts灰度发布
  • 面相小白的php反序列化漏洞原理剖析
  • C++循环引用
  • 重载(overload)和重写(override)的区别
  • 智慧地下采矿可视化平台
  • ubuntu22.04 docker-compose安装postgresql数据库
  • Jenkins声明式Pipeline流水线语法示例
  • 特定数据库的备份脚本
  • 练习LabVIEW第四十一题
  • Unity Addressables 系统处理 WebGL 打包本地资源的一种高效方式
  • Scala学习记录,List
  • 数据库中的用户管理和权限管理
  • 【Python有哪些应用场景】
  • JavaScript 23种经典设计模式简介
  • 萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
  • 青少年编程与数学 02-003 Go语言网络编程 07课题、客户端服务器模型
  • 躺平成长-利用kimi智能编辑助手开发小程序第(10)天