quill富文本编辑器监听复制粘贴清除格式(防止粘贴滚动条回到顶部、网页抖动)

quill中文文档https://www.kancloud.cn/liuwave/quill/1409382

quill英文文档https://quilljs.com/

一、需求

1、保留图片跟空格

2、清除其余所以样式

真的是太开心的了在网上各种百度搜索终于找到了一个方法,

文档没有详细说明

下面看例子吧

quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
  delta.ops = delta.ops.map(op => {
    return {
      insert: op.insert
    }
  })
  return delta
})

试试会得到你想要的效果

二:如果你只是想保留纯文本

看一下试试如下效果

quill.clipboard.addMatcher(Node.ELEMENT_NODE, (node, delta) => {
  let ops = []
      delta.ops.forEach(op => {
        if (op.insert && typeof op.insert === 'string') {
          ops.push({
            insert: op.insert
          })
        }
      })
      delta.ops = ops
      return delta
})

三:自定义粘贴清除格式功能(防止粘贴滚动条回到顶部、网页抖动)

// 阻止粘贴行为导致的滚动条跳动
class CustomClipboard extends Clipboard {
  onPaste(e) {
 
    const top = window.pageYOffset;
    const left = window.pageXOffset;
    if (e.defaultPrevented || !this.quill.isEnabled()) return;
    let range = this.quill.getSelection();
    let delta = new Delta().retain(range.index);
    this.container.style.top =
     (
      window.pageYOffset ||
      document.documentElement.scrollTop ||
      document.body.scrollTop ||
      0
     ).toString() + "px";
    this.container.focus();
    setTimeout(() => {
      this.quill.selection.update(Quill.sources.SILENT);
      let convertData = this.convert();
      
     delta = delta.concat(convertData).delete(range.length);
     this.quill.updateContents(delta, Quill.sources.USER);
     this.quill.setSelection(
      delta.length() - range.length,
      Quill.sources.SILENT
     );
     let bounds = this.quill.getBounds(
      delta.length() - range.length,
      Quill.sources.SILENT
     );
     this.quill.scrollingContainer.scrollTop = bounds.top;

     // scroll window to previous position after paste
     window.scrollTo({ top, left });
    }, 1);

  }
}

遗漏重点代码

 //循环出去文本,格式化重点

            convertData.ops = convertData.ops.map((op) => {

                return {

                    insert: op.insert,

                };

            });

---------------------------------更新修复-----------------分割线---------------------------------------------

vue中如何使用第三种方式:

安装版本:npm install quill

相关代码

import Quill from 'quill'
const Clipboard = Quill.import("modules/clipboard");
import Delta from 'quill-delta';

// 阻止粘贴行为导致的滚动条跳动
class CustomClipboard extends Clipboard {
    onPaste(e) {

        const top = window.pageYOffset;
        const left = window.pageXOffset;
        if (e.defaultPrevented || !this.quill.isEnabled()) return;
        let range = this.quill.getSelection();
        let delta = new Delta().retain(range.index);
        this.container.style.top =
            (
                window.pageYOffset ||
                document.documentElement.scrollTop ||
                document.body.scrollTop ||
                0
            ).toString() + "px";
        this.container.focus();
        setTimeout(() => {
            this.quill.selection.update(Quill.sources.SILENT);
            let convertData = this.convert();
            //循环出去文本,格式化重点
            convertData.ops = convertData.ops.map((op) => {
                return {
                    insert: op.insert,
                };
            });

            delta = delta.concat(convertData).delete(range.length);
            console.log(delta)
            this.quill.updateContents(delta, Quill.sources.USER);
            this.quill.setSelection(
                delta.length() - range.length,
                Quill.sources.SILENT
            );
            let bounds = this.quill.getBounds(
                delta.length() - range.length,
                Quill.sources.SILENT
            );
            this.quill.scrollingContainer.scrollTop = bounds.top;

            // scroll window to previous position after paste
            window.scrollTo({ top, left });
        }, 1);

    }
}

//此处需要注册
Quill.register("modules/clipboard", CustomClipboard, true);


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Quill 是一个基于浏览器的富文本编辑器,它提供了一种简单、灵活、强大的方式来创建和编辑富文本内容。下面是 Quill 富文本编辑器的使用教程: 1. 引入 Quill 库 首先,在你的 HTML 文件中引入 Quill 库: ```html <script src="//cdn.quilljs.com/1.3.6/quill.js"></script> <link href="//cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet"> ``` 2. 创建 Quill 实例 在页面中创建一个空的 div 元素,用于 Quill 编辑器的容器: ```html <div id="editor"></div> ``` 然后,在 JavaScript 中创建一个 Quill 实例: ```javascript var quill = new Quill('#editor', { theme: 'snow' // 使用 snow 主题 }); ``` 3. 添加编辑器内容 在 Quill 编辑器中添加内容可以通过 `setContents` 方法或 `setText` 方法实现。 ```javascript // 使用 setContents 方法添加内容 quill.setContents([ { insert: 'Hello World!' } ]); // 使用 setText 方法添加内容 quill.setText('Hello World!'); ``` 4. 监听编辑器内容变化 如果你需要在内容变化时执行一些操作,可以监听 `text-change` 事件: ```javascript quill.on('text-change', function(delta, oldDelta, source) { console.log('内容已经变化'); }); ``` 5. 获取编辑器内容 你可以使用 `getContents` 方法获取 Quill 编辑器中的内容: ```javascript var content = quill.getContents(); console.log(content); ``` 6. 获取编辑器纯文本内容 你可以使用 `getText` 方法获取 Quill 编辑器中的纯文本内容: ```javascript var text = quill.getText(); console.log(text); ``` 7. 自定义编辑器样式 你可以通过修改 CSS 样式来自定义编辑器的样式,Quill 提供了许多 CSS 类名,用于定制不同的编辑器元素。 例如,你可以修改编辑器的背景颜色: ```css .ql-editor { background-color: #f5f5f5; } ``` 以上就是 Quill 富文本编辑器的使用教程,希望能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值