如何在tinymce中实现一些自定义弹框和侧边栏

如何在tinymce中实现一些自定义弹框和侧边栏

样图

先看效果图,符合需求请往下看实现方式。
在这里插入图片描述

侧边栏中可以实现,评注内容、大纲等任何自定义的功能
在这里插入图片描述

实现方式

1.tinymce官方文档有使用官方弹框,内部使用自定义html的方式,详情可前往官网查看。
2.像我上面一样,在引入tinymce的组件内自己编写元素,自己使用变量控制元素显隐等问题。

关键

其实就是怎么样将组件内的变量和函数在plugin.js内部调用。
只要在plugin.js中能够调用到页面上的变量和方法,就可以随意操控自己自定义的组件了。
最开始我的实现是绑在window全局变量上,在任何地方都可以调用到,但是后来发现更官方的方法是挂在editor上,这是编辑器挂在所有变量和函数专用的变量。

代码段

以下均在vue3的项目框架下,其他技术栈请自行更改写法

//编辑器组件的html部分
<template>
	<div class="box">
		<div class="editor">
			<Editor id="docTinymce-g" v-model="myValue" :init="init" :disabled="readonly" />
		</div>
		<div class="sidebar" v-if="SidebarType">
			<div>自定义侧边栏内容</div>
		</div>
	</div>
</template>
// 编辑器组件的js部分
<script setup lang="ts">
	import { ref, onMounted, watch, reactive } from 'vue';
	import tinymce from 'tinymce/tinymce';
	import Editor from '@tinymce/tinymce-vue';
	const init: any = reactive(
  	{
	    image_advtab: false,
	    placeholder: '在这里输入文字',
	    language_url: '/tinymce/langs/zh_Hans.js', // 汉化路径
	    language: 'zh_Hans',
	    skin_url: '/tinymce/skins/ui/oxide',
	    height: window.innerHeight - 2 - 50, // 编辑器高度,可以考虑获取窗口高度,以适配不同设备屏幕
	    // width: 1000,
	    save_enablewhendirty: false, //此时无论内容是否更改都可以点击保存按钮
	    images_upload_url: '/api/file/uploadFileAndGetUrl', //图片服务器地址
	    image_resize: false, // 禁用图片大小调整功能
	    plugins:
	      'accordion  anchor autolink  autosave charmap code codesample directionality emoticons fullscreen help image importcss insertdatetime link lists media nonbreaking pagebreak preview quickbars save searchreplace table visualblocks visualchars wordcount kityformula-editor formatpainter comment workItem secondarySidebar version g-action toc workitem-extension drawio mindmap',
	    toolbar: [
 'save action undo redo formatpainter blocks bold italic geshi fontfamily fontsize removeformat workItem bullist numlist alignment comment table insertImg searchreplace secondarySidebar version help'
	    ],
	    style_formats_autohide: true, // 控制 blocks 按钮的可用性
	    toolbar_mode: 'floating',
	    menubar: false, //菜单栏,true为显示,false可隐藏
	    quickbars_insert_toolbar: false, //禁用每行开头处自动弹出的工具栏
	    quickbars_selection_toolbar: false, // 禁用选中文本时的工具栏
	    promotion: false, //去除右上角的“Upgrade”的促销按钮
	    statusbar: false, //控制元素路径显示
	    branding: false,
	    contextmenu: 'workitem', // 右键菜单
	    font_family_formats:
	      "微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale 			mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings",
	     setup: (editor: any) => {
	       editor.SidebarType = SidebarType //---------绑定变量的地方
     },
     const SidebarType = ref(false)
</script>

以下是编辑器的插件代码,在plugin.js中,不了解如何自定义插件的,请看我另一篇文章介绍。
链接: tinymce自定义插件

// plugin.js
; (function () {
  tinymce.PluginManager.add('openSidebar', function (editor) {
    // 添加插件按钮到工具栏
    editor.ui.registry.addButton('openSidebar', {
      icon: null,
      text: '打开侧边栏', 
      tooltip: '打开侧边栏',
      onAction: function () {
        // 点击按钮时执行的操作
        editor.SidebarType.value = true
      }
    })
  })
})()

CSS部分我就不写了,推荐使用flex部分实现编辑器和侧边栏左右分开

拓展

弹框等其他所有自定义功能都可以这样操作,自己编写一个dialog或者饿了么的dialog然后控制显隐的函数和变量绑定到editor上,在插件中使用editor调用即可

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tinymce 是一个基于JavaScript的富文本编辑器,它在网页开发广泛应用于文本编辑、内容发布等场景。在 tinymce ,要实现自定义图片上传功能,可以通过插件的方式来进行。 首先,我们需要了解 tinymce 预留的自定义上传接口。 tinymce 提供了`file_picker_callback`接口,可以自定义上传图片的触发方式和上传逻辑。通过这个接口,我们可以按需实现图片上传功能。 具体操作如下: 1. 在页面引入 tinymce 的库文件和插件,确保可以正确加载富文本编辑器。 2. 初始化 tinymce 实例时,需要传入相应的参数,其包括 `file_picker_callback`接口。该接口会在用户点击插入图片按钮时调用。 3. 将`file_picker_callback`接口指定为一个自定义的方法,用于处理图片上传的逻辑。在该方法,可以通过一些文件上传框架(如 FormData、jQuery.ajax()等)实现图片的上传,并将上传成功后的图片地址返回给 tinymce 编辑器。 4. 根据返回的图片地址,我们可以在页面上插入图片。 需要注意的是,上传的图片应该保存在服务器端,并返回图片的 URL 地址,然后通过 `editor.insertContent` 方法插入到编辑器。另外,为了供用户查看已上传的图片,也可以在编辑器上方增加一个图片预览区域。 这样,就完成了在 tinymce 自定义图片上传的功能。用户可以点击插入图片按钮,选择本地图片并上传,然后在编辑器显示上传后的图片。 总结起来,要在 tinymce 实现自定义图片上传的功能,需要了解 tinymce 提供的 `file_picker_callback` 接口,并通过该接口自定义图片的上传逻辑和操作。同时,需要将上传后的图片地址插入到编辑器,使用户能够看到上传的图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值