【问题标题】:Emulate document pages in Quill js editor在 Quill js 编辑器中模拟文档页面
【发布时间】:2018-09-13 13:55:18
【问题描述】:

我想在Quill编辑器中实现多页文档的效果。我的意思是,在文本达到一定数量的最大像素高度(相当于 300dpi)后,它将创建分页符/或跳转到下一页(容器编辑器实例)。类似于 Google 文档中的内容。

我只想创建另一个 quill 实例并关注它,但这会创建另一个工具栏(尚不支持多个编辑器的单个工具栏,但有 pr )

现在,我只是创建一个分隔线,它是一个 div 元素,与白页后面的背景颜色相同。

有没有人知道一些好的和干净的解决方案,或者有任何想法我可以解决它?

【问题讨论】:

  • 您好!我也有同样的问题?你找到一些解决方案了吗?
  • 我只是不明白每页生成一个 Quill 编辑器的好处。分隔块元素对我来说似乎是一个很好的解决方案,因为您的所有文档(所有页面)都在同一个 Quill.getContents();问题是根据内容以编程方式更改块位置。如果需要以不同的方式放置,您可以使用剪贴板方法在每个字符上添加外观?

标签: javascript quill


【解决方案1】:

关于监听编辑器的高度以触发添加另一个,在 Quill 的 API 内部或外部使用您自己的 vanilla 有很多方法。没问题。

对于共享一个工具栏的多个编辑,

这是来自 QuillJS 上的一个主题,仍然是 Open,问题:

Consider allowing multiple editors on the same page & to use the same toolbar. #633

一个简洁的解决方案来自thisPawel Glowacki的评论

3.仅在活动框中初始化 Quill 编辑器并销毁以前的编辑器+一个工具栏这是我正在使用的解决方案 今天,它带来了最好的性能和一些干净的东西 解决方案。当活动框发生变化时,我得到了 Quill 实例 内容,删除以前的 Quill 事件 + 实例,然后我更新 DOM 作为编辑器创建的 HTML 不会自动删除。

我正在使用这个 quill delta to html 插件

if (window.editor) {
    //Get the content
    var content = '';
    if (window.editor.getLength() > 1) {
        var delta = window.editor.getContents(); //store globally
        var converter = new QuillDeltaToHtmlConverter(delta.ops, {});
        var html = converter.convert();
        if (typeof html !== "undefined" && html !== null) {
            content = html;
        }
    }

    //remove any [on events](https://quilljs.com/docs/api/#events) you attached to the Quill instance 

    //remove Quill instance
    window.editor = undefined;

    // clean DOM and set content
    document.getElementById('previousBoxId').classList.remove('ql-container');
    document.getElementById('previousBoxId').innerHTML = content;
}

//create new quill instance
window.editor = new Quill(...)

//set the editor contents ("//store globally" comment above)
if (editorContent) {
    window.editor.setContents(editorContent)
}

window.editor.focus(); //如果你想初始化任何on events Quill 不使用单个管理编辑器的多个实例 工具栏不是一个大问题,但它确实需要你做 研究/测试 + 自己添加逻辑,这可能很麻烦。

我希望有人觉得这很有用。

如果您需要同时跟踪多个 Quill 实例,请创建 一个 JavaScript 对象并将它们存储在某个键下。

window.editors = {
   editor1: Quill_instance,
   editor2: Quill_instance,
   ...
}

我也无法在 Quill 文档中找到更好的解决方案,但我 有一个非常大的应用程序,它可以处理 50 多个工具栏并破坏 每次我创建一个新的 Quill 时都会创建一个新的工具栏 实例没有引起任何问题。

【讨论】:

  • 虽然这适用于评论中提到的多个编辑器,但对于实现页面来说还不够好。由于页面是一个在另一个之下,内容可能会从一个溢出到另一个,或者用户可以选择所有页面的内容进行格式化
  • 这是成功处理多个编辑器后要解决的另一个问题。您可以随时循环浏览您的编辑器集合(例如上面的window.editors)并应用格式。如果你想从所有页面中选择所有文本,你可能会使用 Ctrl+A,我们也可以通过编程方式处理。
  • 在这种情况下,您将如何处理从一页到另一页的溢出内容?
  • 对于将子字符串从一个编辑器传递到另一个编辑器,还没有一个可靠的解决方案。理想情况下,我们可以收听输入,我猜想在活动编辑器中交叉检查字符串的长度及其最大值。完整功能的非常困难的部分。 ?
  • 我希望。编辑器工具栏将具有字体大小或插入图像的功能,这会完全弄乱子字符串的东西
猜你喜欢
  • 2019-11-03
  • 2018-01-25
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多