富文本編輯器文檔:https://developers.weixin.qq.com/miniprogram/dev/component/editor.html
最近在做小程序上的富文本編輯器功能,發現幾個隱藏點:
1. 小程序中的 editor 組件本質上是集成了 quill 編輯器:https://quilljs.com/,官方文檔上也說明了,導出里面的內容需要加一段 quill 的 css 代碼
2. 至於怎么集成,在 ready 后有時候能看到一個 webviewId,所以推測是通過 webview 集成的
關於工具欄
1. 工具欄是和 editor 組件分開的,可以任意定制
2. 理論上 quill 里面的工具欄,小程序都支持
3. 官方中文文檔上的 代碼片段只顯示了部分工具欄(但是包含解決 iOS 頁面上推問題的邏輯,見下文):https://developers.weixin.qq.com/s/W7uZ3EmU7jbl
4. 官方英文文檔上的 代碼片段展示了所有工具欄(可通過文檔右上角切換語言查看):https://developers.weixin.qq.com/s/siL4iemP7n8W
關於 iOS 頁面上推問題
官方中文文檔中包含對應解決方案,思路為:
根據 editor 鍵盤彈起,動態調整 editor 的高度,由於 iOS 會上推頁面,所以在上推完成(可以通過鍵盤高度變化的 duration 拿到時間)時直接滾動頁面到頂部: wx.pageScrollTo({ scrollTop: 0 })
最終的效果是頁面會先上推,后會彈,光標可以始終保持可見。(可能會有抖動,目前沒有發現更好的解決辦法)
關於頁面底部如果有 Fixed 元素問題
聚焦時會把底部的 Fixed 元素頂起,這個屬於兼容性問題,在某些安卓機如:華為 P30,小米9 中均有出現
由於筆者的需求需要根據底部元素動態計算 editor 的高度,所以可以如下解決:底部元素換為流式布局,用隱藏的 Fixed 元素用來計算高度。當然前提是頁面只有一屏不需要滾動。
關於 P30 有時無法彈出鍵盤的問題
經測試發現聚焦 editor 出現此問題概率較大,懷疑是包裹 editor 的 webview 聚焦出現問題,調試了好久發現在聚焦之前往 editor 插入一段空白文本:insertText({ text: '' }) 或者 editorCtx.blur() 可以解決
以上為筆者最近使用 editor 組件遇到的問題,歡迎交流~