Quill是一個很流行的富文本編輯器,github上star大約21k: github:https://github.com/quilljs/quill/ 官網: https://quilljs.com/ 使用 下載: vue中使用: 效果 創建Quill實例需要兩個參數,container與opt ...
Quill是一個很流行的富文本編輯器,github上star大約21k:
github:https://github.com/quilljs/quill/
使用
<!-- Include stylesheet --> <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> <!-- Initialize Quill editor --> <script> var quill = new Quill('#editor', { theme: 'snow' }); </script>
下載:
npm install [email protected]
vue中使用:
<template> <div> <div id="editor"> <p>Hello World!</p> <p>Some initial <strong>bold</strong> text</p> <p><br></p> </div> </div> </template> <script> import Quill from 'quill' export default { name: "QuillEditor", mounted () { this.initQuill() }, beforeDestroy () { this.quill = null delete this.quill }, methods: { initQuill () { const quill = new Quill('#editor', { theme: 'snow' }) this.quill = quill }, } } </script>
效果
創建Quill實例需要兩個參數,container與options
Container
container可以是css選擇器,也可以是DOM對象:
const editor = new Quill('#editor')
或者
const container = document.getElementById('editor'); const editor = new Quill(container);
Options
包括theme、formats、modules等
const options = { debug: 'info', modules: { toolbar: '#toolbar' }, placeholder: 'Compose an epic...', readOnly: true, theme: 'snow' }; const editor = new Quill('#editor', options);
獲取與顯示編輯內容
富文本編輯器的主要作用是編輯文本、保存、顯示等。
獲取編輯完成的內容:
const html = document.querySelector('#editor').children[0].innerHTML console.log(html)
內容:
<p>Hello World!</p><p>Some initial <strong>bold</strong> text</p><p><br></p>
獲取內容後置於編輯器中顯示:
const html = document.querySelector('#editor').children[0].innerHTML this.quill.pasteHTML('<h3>add some title</h3>' + html)
顯示:
Toolbar
編輯器上方一欄可以設置文本格式部分,即為modules中的toolbar,可以使用預設值,也可以定製。
使用數組:
const toolbarOptions = ['bold', 'italic', 'underline', 'strike']; const quill = new Quill('#editor', { modules: { toolbar: toolbarOptions } });
效果:
也可以分組:
const toolbarOptions = [ ['bold', 'italic', 'underline', 'strike'], // toggled buttons ['blockquote', 'code-block'], [{ 'header': 1 }, { 'header': 2 }], // custom button values [{ 'list': 'ordered'}, { 'list': 'bullet' }], [{ 'script': 'sub'}, { 'script': 'super' }], // superscript/subscript [{ 'indent': '-1'}, { 'indent': '+1' }], // outdent/indent [{ 'direction': 'rtl' }], // text direction [{ 'size': ['small', false, 'large', 'huge'] }], // custom dropdown [{ 'header': [1, 2, 3, 4, 5, 6, false] }], [{ 'color': [] }, { 'background': [] }], // dropdown with defaults from theme [{ 'font': [] }], [{ 'align': [] }], ['clean'] // remove formatting button ]; const quill = new Quill('#editor', { modules: { toolbar: toolbarOptions }, theme: 'snow' });
效果
同一組會置於同一<span>中。
也可以使用css選擇器,最全的toolbar:
<div id="toolbar"> <span class="ql-formats"> <select class="ql-font"></select> <select class="ql-size"></select> </span> <span class="ql-formats"> <button class="ql-bold"></button> <button class="ql-italic"></button> <button class="ql-underline"></button> <button class="ql-strike"></button> </span> <span class="ql-formats"> <select class="ql-color"></select> <select class="ql-background"></select> </span> <span class="ql-formats"> <button class="ql-script" value="sub"></button> <button class="ql-script" value="super"></button> </span> <span class="ql-formats"> <button class="ql-header" value="1"></button> <button class="ql-header" value="2"></button> <button class="ql-blockquote"></button> <button class="ql-code-block"></button> </span> <span class="ql-formats"> <button class="ql-list" value="ordered"></button> <button class="ql-list" value="bullet"></button> <button class="ql-indent" value="-1"></button> <button class="ql-indent" value="+1"></button> </span> <span class="ql-formats"> <button class="ql-direction" value="rtl"></button> <select class="ql-align"></select> </span> <span class="ql-formats"> <button class="ql-link"></button> <button class="ql-image"></button> <button class="ql-video"></button> <button class="ql-formula"></button> </span> <span class="ql-formats"> <button class="ql-clean"></button> </span> </div>
<script> const quill = new Quill('#editor', { modules: { toolbar: '#toolbar' } }); </script>
效果:
toolbar里的control與Quill的format是對應的,可以用來添加或者移除format:
我們可以添加定製的handler來改變預設行為:
const toolbarOptions = { handlers: { // handlers object will be merged with default handlers object 'link': function(value) { if (value) { var href = prompt('Enter the URL'); this.quill.format('link', href); } else { this.quill.format('link', false); } } } } const quill = new Quill('#editor', { modules: { toolbar: toolbarOptions } }); // Handlers can also be added post initialization const toolbar = quill.getModule('toolbar'); toolbar.addHandler('image', showImageUI);
可以定製handler來進行圖片視頻上傳。