Vue实现富文本插入Emoji

介绍

项目中在聊天页面,要求实现一个类似 youtubeemoji 功能,发送后能多端显示一致

需求分析

一个富文本框,支持输入文字,插入 emoji 转成 img ,同时在发送时转成字符串,接收消息,将字符串转成 document node 在页面显示

难点

  1. 得焦插入和失焦插入内容时光标位置计算, 参考Range的使用

  2. 富文本内容(含 emoji 图片)转字符串, 参考Emoji多端统一处理

  3. 字符串消息转成 html (含 emoji 图片)

核心代码

::: code-group

<div
  id="emojiInput"
  ref="editor"
  :class="['emojiInput el-textarea', isallow ? '' : 'notAllow', isInFocus ? 'focus-Bk': 'not-focus', isShowBtn ? 'modify-padding' : '', htmlCount ? '' : 'emojiInputEmpty']"
  :contenteditable="isallow"
  :placeholder="$t('ModelLive.saySomeThing')"
  @keypress="stopKeyEvent"
  @click="setInputFocus"
  @blur="setInputBlur"
  @focus="getFocus"
  @keypress.enter="pressEnter"
/>

:::

参考

Last updated

Was this helpful?