“發(fā)布公司公告,有圖有文字的那種”

某天,當我安安靜靜的在敲代碼,突然業(yè)務(wù)同事問我,
-‘hi,我們可以做公司公告的子應(yīng)用嗎?’
-‘當然可以’
-‘那,可以發(fā)布公告嗎?有圖有文字的那種!’
-‘你讓我想想’

開啟面向Google編程模式

劃重點,核心API ===>document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

MDN 上的介紹

當一個HTML文檔切換到設(shè)計模式時,document暴露 **execCommand **方法,該方法允許運行命令來操縱可編輯內(nèi)容區(qū)域的元素。

大多數(shù)命令影響documentselection(粗體,斜體等),當其他命令插入新元素(添加鏈接)或影響整行(縮進)。當使用contentEditable時,調(diào)用 execCommand() 將影響當前活動的可編輯元素。

話不多說,開始行動

  1. 首先需要準備一個div用來承放內(nèi)容,contenteditable屬性置為true,準備幾個按鈕對編輯區(qū)域進行操作
 <button @click="execCommand('bold')">加粗</button>
 <div class="editor" contenteditable="true" />

2.實現(xiàn)幾個簡單的文本效果

  • 加粗 execCommand('bold')
  • 添加水平線 execCommand('insertHorizontalRule')
execCommand (name, args = null) {
  document.execCommand(name, false, args)
 }
  • 添加鏈接 createLink ()
 createLink () {
  let url = window.prompt('請輸入鏈接地址')
  if (url) this.execCommand('createLink', url)
}

3.上傳圖片(以本地圖片為例,也可將圖片上傳服務(wù)器后再進行添加)。

// html
<button class="upload-img" >插入圖片
   <input  type="file"  @change="insertImg($event)">
</button>
// js
  insertImg (e) {
      console.log(e.target.files[0])
      let reader = new FileReader()
      let file = e.target.files[0]
      reader.onload = () => {
        let base64Img = reader.result
        console.log(base64Img)
        this.execCommand('insertImage', base64Img)
        document.querySelector('.upload-img input').value = ''
      }
      reader.readAsDataURL(file)
    },

當我以為一切都結(jié)束的時候,‘誒?如果想撤銷編輯內(nèi)容咋整?還有回復(fù)?’

不復(fù)雜,繼續(xù)給execCommand()傳入相應(yīng)的命令唄,第二步相同的方法,改一下傳入的參數(shù)即可。

  • 撤銷 execCommand('undo')
  • 恢復(fù) execCommand('redo')

最后,來看一下實現(xiàn)效果。


測試一下

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容