一般来说,在 quill 1.3 稳定版中,文本是可以移动的,也就是说,我们可以将某个列表从内部移动到某个地方,或者将文本从某个地方拖放到某个地方,不需要做任何额外的事情为此,即使在纯文本区域也是如此。
例如,如果您尝试下面的代码,您将看到“Hello World!” “世界!”您可以将其剪切并保留在“开头”,然后拖动即可获得剪切和粘贴的效果。
但是如果你删除 2.0.0 dev 版本注释行并获取 1.3.6 版本注释部分并运行它,如果它没有特别工作,我该如何使其工作?
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<!-- Create the editor container -->
<div id="editor">
<p>Hello World!</p>
<p>Some initial <strong>bold</strong> text</p>
<p><br></p>
</div>
<!-- Include the Quill library -->
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<!--
<script src="https://cdnjs.cloudflare.com/ajax/libs/quill/2.0.0-dev.3/quill.min.js"></script>
-->
<!-- Initialize Quill editor -->
<script>
var quill = new Quill('#editor', {
theme: 'snow'
});
</script>```
请注意,这只能部分回答您的问题,因为事件处理程序仅用于演示目的,远未正确实现。
默认情况下,Quill 2.0 通过在 e.preventDefault()
事件处理程序中添加
dragstart
来禁用所有 拖动事件。该事件处理程序曾经存在于
Quill
类中,但 已移至 Scroll
blot 以便于覆盖。这个改动在2.0.0-dev.3
中不存在,所以我在新版本下测试了2.0.0-beta.0
。
下面演示了如何覆盖
Scroll
blot 事件处理程序。 (我将把它留给其他人来弄清楚如何正确实现处理程序)。
let Scroll = Quill.import('blots/scroll');
class DraggableScroll extends Scroll {
constructor(registry, domNode, { emitter }) {
super(registry, domNode, { emitter });
this.domNode.addEventListener('drop', (e) => this.handleDragEnd(e));
}
handleDragStart(e) {
//e.preventDefault(); // remove to enable dragging
}
/*simply demo handler only works on texts, and doesn't preserve styles*/
handleDragEnd(e) {
e.preventDefault();
const data = e.dataTransfer.getData('text/plain');
const selection = quill.getSelection();
quill.deleteText(selection.index, selection.length);
let index;
if (document.caretRangeFromPoint) {
index = document.caretRangeFromPoint(e.clientX, e.clientY).startOffset;
} else {
// firefox
index = e.rangeOffset;
}
quill.insertText(index, data);
quill.setSelection(index + data.length, 0);
}
};
Quill.register(DraggableScroll);
var quill = new Quill('#editor', {
theme: 'snow'
});
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<body class="h-full">
<div id="editor">
<p>Hello World!</p>
<p>Some initial <strong>bold</strong> text</p>
<p><br></p>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/quill/2.0.0-beta.0/quill.min.js"></script>
</body>