搬砖么,能怎么搬, 为什么不花时间去研究

let BlockEmbed = Quill.import('blots/block/embed');
class CustomImgBlot extends BlockEmbed {
    static get ATTRIBUTES() {
        // 声明元素属性值
        return ['class','data-alt','data-title'];
    static create(opt) {
        let node = super.create();
        node.setAttribute('class', 'customImg');
        node.setAttribute('contentEditable', 'false');
        if ("object" == typeof opt) {
            // 这里可以针对node元素的innerHTML添加自己的HTML
        return node;
    static value(domNode) {
        // 输出Delta内部内容
        return domNode.innerHTML;
    // 这里针对Delta attributes的输出
    static formats(domNode) {
        return this.ATTRIBUTES.reduce(function (formats, attribute) {
            if (domNode.hasAttribute(attribute)) {
                formats[attribute] = domNode.getAttribute(attribute);
            return formats;
        }, {});
    format(name, value) {
        if (this.constructor.ATTRIBUTES.indexOf(name) > -1) {
            if (value) {
                this.domNode.setAttribute(name, value);
            } else {
                this.domNode.removeAttribute(name);
        } else {
            super.format(name, value);
CustomImgBlot.blotName = 'customImg';
CustomImgBlot.tagName = 'cimg';
Quill.register(CustomImgBlot);

使用示例    →↓

* 自定义图片控件 function customImgControl() { let BlockEmbed = Quill.import('blots/block/embed'); class CustomImgBlot extends BlockEmbed { static create(opt) { let node = super.create(); node.setAttribute('class', 'customImg'); node.setAttribute('contentEditable', 'false'); if ("object" == typeof opt) { var name = opt.src.substr(opt.src.lastIndexOf('/') + 1); if (opt.address && opt.address.length > 0) { node.innerHTML = "<div class=\"element_to_delete\" onclick=\"removeImage(this);\"></div><div onclick=\"imgClick(this);\" class=\"img-content\"><img id=\"" + name + "\" class=\"img-background\" src=\"" + opt.src + "\"></div><div class=\"imgLoaction\"><font></font><span>" + opt.address + "</span></div>"; } else { node.innerHTML = "<div class=\"element_to_delete\" onclick=\"removeImage(this);\"></div><div onclick=\"imgClick(this);\" class=\"img-content\"><img id=\"" + name + "\" class=\"img-background\" src=\"" + opt.src + "\"></div>"; } else if ("string" == typeof opt) { // 如果进来的是字符串就有可能是HTML内容 node.innerHTML = opt; return node; static value(domNode) { return domNode.innerHTML; CustomImgBlot.blotName = 'customImg'; CustomImgBlot.tagName = 'cimg'; Quill.register(CustomImgBlot); * 插入图片 * @param {Object} opt 属性键值对,这些属性都将被复制到当前插入图片 * @example * ```javascript * insertImage({src:'a/b/c.jpg', address:'地址可传不可传'}); * ``` insertImage = function(opt) { if (opt == null) return; quill.insertEmbed(quill.getSelection().index, 'customImg', opt); 搬砖么,能怎么搬, 为什么不花时间去研究let BlockEmbed = Quill.import('blots/block/embed');class CustomImgBlot extends BlockEmbed { // 声明内部对象 static obj = {}; static get ATTRIBUTES() { // 声明元素属性值...
羽毛笔 Delta 到HTML转换器 使用正确嵌套的列表将格式转换为HTML(仅插入ops)。 克隆存储库后,可以通过打开demo-browser.html文件来尝试进行转换的实时演示。 v0.10.0更改:从v0.10.0 import/require已更改。 请参阅下面的用法 npm install quill - delta -to-html var Quill Delta ToHtmlConverter = require ( ' quill - delta -to-html' ) . Quill Delta ToHtmlConverter ; // TypeScript / ES6:
Delta 被用做描述 Quill 编辑器的内容和变化,简单但表达力强的数据格式。这种格式本质上是一种 JS ON格式,人类可读同时及其也能容易识别。 Delta 能描述任意 Quill 内容,包括所有的文本、格式信息,并且没有HTML多义性及复杂性的缺点。 不要被他的名称 delta 迷惑, Delta s(Δ增量)代表文档和文档的改变。如果将 Delta s看做是一个文档到另一个文档的操作指令,那么 Delta 表示一个文档就是从空文档开始到现有文档的操作指令的表达。 Delta 被独立成一个单独的库,以便其能在 Quill 以外的地方使用。
最近被 quill . js 这个富文本编辑器折磨了好几天,最终也算是完成需求。现描述一下这次遇到的需求时什么: 产品说需要在富文本编辑器加入一个图文混排的功能(图片需要支持缩放、并且图片与文字需要居中对齐)。之前只是文字并没有上传图片的功能。在拿到需求之后觉得很简单,就是在富文本编辑器新增一个图片上传功能。之后在开发的过程中还是遇到了好多问题。下面详细的给大家讲解一下。希望可以帮助到大家。 1、首先需要解决的事图片上传以及缩放功能。实现步骤。 editorOption: { theme
今天分享下” Quill 编辑器操作实例详解“这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习一下吧。 一转眼早已2020年,难耐的人们不会再能够满足于简易的文本,因此拥有花哨的带上各种各样款式的文本,殊不知有文本还不够,大家还必须让使用者在小编的情况下,可以插进各种各样 自定义 信息种类,使我们传出去的推广软文更为漂亮,因而拥有本文。 因为 Quill 在线编辑器内置的富文本过虑(绝大多数流行在线编辑器都是会对富文本开展过虑解决)
在 Web 开发领域,富文本编辑器( Rich Text Editor )是一个使用场景非常广,又非常复杂的组件。 要从0开始做一款好用、功能强大的富文本编辑器并不容易,基于现有的开源库进行开发能节省不少成本。 Quill 是一个很不错的选择。 本文主要介绍 Quill 内容渲染相关的基本原理,主要包括: Quill 描述编辑器内容的方式 Quill Delta 渲染到DOM的基本原理 Scroll类管理所有子Blot的基本原理 Quill 如何描述编辑器内容? Quill 简介 const BlockEmbed = Quill .import('blots/block/embed'); // 定义 新的blot类型 class StockEmbed extends BlockEmbed { static create(value) { const node = s......
container: '#toolbar', // Selector for toolbar container handlers: { 'bold': customBoldHandler 因为containe @blur="onEditorBlur($event)" @focus="onEditorFocus($event)" @change="onEditorChange($event)" import ' quill /dist/ quill .core.css' import ' quill /dist/ quill .snow.css' import ' quill /dist/ quill .bubble.css' 导入富文本组件 import { quill Editor } from 'vue- quill -editor' components: { quill Editor < quill -ed 将代码:that.$refs.editRef.content = data.content 改成:document.querySelector("div.ql-editor").innerHTML = data.content 2.刷新audio标签消失问题: 将新建的代码在渲染时候再重新手动建一遍audio标签,保证修改页面刷新时au... github地址 官网地址 安装 quill (这里是在vue项目中使用的) npm install -S quill -image-paste-module quill -image-resize-module vue- quill -editor 如何在项目中使用请看官网,这里主要记录一下如何使用 自定义 标签,很多时候,我们需要在标签中增加 自定义 属性 ,或者新增 quill 原生不带有的标签,比如video,audio 新增blot文件 import Vue Quill Editor from 'vue- quill -editor' import ' quill /dist/ quill .core.css' import ' quill /dist/ quill .snow.css' import ' quill /dist/ quill .bubble.css' Vue.use(Vue Quill Editor) 3. 在组件中使用vue- quill -editor: <template> < quill -editor ref="my Quill Editor" :options="editorOption"></ quill -editor> </template> <script> export default { data () { return { editorOption: { modules: { toolbar: [ ['image', 'code-block'] placeholder: '请输入内容', theme: 'snow' methods: { insertImage () { let input = document.createElement('input') input.setAttribute('type', 'file') input.click() // Listen upload local image and save to server input.onchange = () => { let file = input.files[0] // file type is only image. if (/^image\//.test(file.type)) { this.uploadImageToServer(file, (imageUrl) => { let range = this.$refs.my Quill Editor. quill .getSelection() this.$refs.my Quill Editor. quill .insertEmbed(range.index, 'image', imageUrl) } else { console.warn('You could only upload images.') uploadImageToServer (file, callback) { let formData = new FormData() formData.append('image', file) // Your upload image to server api. axios.post('api/upload/img', formData).then(response => { if (response.data.success) { callback(response.data.data.url) </script> 请注意,这仅是一个示例,需要根据您的具体情况进行调整。如果需要上传图片到服务器,请自行实现上传