Vue3實(shí)現(xiàn)Emoji表情的四種方案
使用輸入法輸入表情
Textarea中支持接受輸入法輸入的表情,在 macOs 中直接輸入“微笑”,會直接打印出??的表情,和文字沒區(qū)別。
但是這種方案不好的點(diǎn)在于只能手輸,沒辦法達(dá)到選擇的效果。
使用Unicode編碼輸入表情
在 Unicode 編碼中存在對應(yīng)表情的編碼區(qū)間,位于基本多語言面(Basic Multilingual Plane,BMP),碼點(diǎn)在 U+1F600 到 U+1F6FF。
因?yàn)槟壳笆褂玫氖?textarea 作為輸入框,所以 Unicode 編碼在輸入框顯示出來是純文本,這就導(dǎo)致用戶很有可能出現(xiàn)誤修改。
另外會話信息的展示區(qū)域,現(xiàn)在也是直接使用的模板語法,需要在展示區(qū)使用 v-html 才能正常展示表情,否則也是純文本。
但是基于 Unicode 編碼的這種模式非常輕量,并不需要額外的庫和特殊操作。
使用自定義內(nèi)容進(jìn)行對應(yīng)
使用自定義內(nèi)容進(jìn)行對應(yīng),這應(yīng)該是QQ的表情方案(雖然我沒看過源碼,純猜測)。
QQ的輸入框在使用 “/” 進(jìn)行輸入的時候會彈出相應(yīng)的表情提示,確定以后變成表情。這里面大概率是經(jīng)歷了對特定編碼的轉(zhuǎn)換。
同理我們也可以用這種方案進(jìn)行轉(zhuǎn)換,可以使用特定的符號在系統(tǒng)中進(jìn)行解析,生成表情。
比如系統(tǒng)中寫死 “[wx]” 代表是的 ?? ,當(dāng)輸入框通過 input 事件監(jiān)聽到存在 “[wx]” 的時候,代碼將其自動轉(zhuǎn)換為 ??。
插個眼,后面把 Unicode 編碼通過這種方式實(shí)現(xiàn)一下。
使用 emoji-mart-vue 插件
使用插件是性價比最高的方案,這個插件相當(dāng)于直接把輸入的emoji集成了,無需改造原本的代碼,插入的emoji表情輸入法輸入的沒有區(qū)別。
唯一可能存在的瑕疵可能是沒辦法自定義。
安裝
npm install emoji-mart-vue-fast
使用
<template>
<Picker :data="emojiIndex" :emojiSize="18" :showPreview="false" :infiniteScroll="false" :i18n="emojiI18n"
set="apple" @select="handlerEmoji" />
</template>
<script>
import data from 'emoji-mart-vue-fast/data/all.json';
import 'emoji-mart-vue-fast/css/emoji-mart.css'
import { Picker, EmojiIndex } from 'emoji-mart-vue-fast/src';
export default {
components: { Picker, EmojiIndex },
data() {
return {
editorValue: "",
emojiOpen: false,
emojiI18n: {
search: '搜索',
notfound: 'No Emoji Found',
categories: {
search: '搜索結(jié)果',
recent: '經(jīng)常使用',
smileys: '表情與情感',
people: '人物與身體',
nature: '動物與自然',
foods: '食物與飲料',
activity: '活動',
places: '旅行與地理',
objects: '物品',
symbols: '符號標(biāo)志',
flags: '旗幟',
custom: 'Custom',
joy: '哭笑'
}
},
}
},
computed: {
emojiIndex() {
return new EmojiIndex(data);
}
},
methods: {
// 選中emoji方法
handlerEmoji(event) {
console.log(event);
},
}
}
</script>
結(jié)論
想要自定義可以嘗試第三種方案,現(xiàn)成的直接第四種方案。
到此這篇關(guān)于Vue3實(shí)現(xiàn)Emoji表情的四種方案的文章就介紹到這了,更多相關(guān)Vue3實(shí)現(xiàn)Emoji表情內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue數(shù)組添加元素的三種實(shí)現(xiàn)方式
這篇文章主要介紹了Vue數(shù)組添加元素的三種實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-09-09
vue如何移動到指定位置(scrollIntoView)親測避坑
這篇文章主要介紹了vue如何移動到指定位置(scrollIntoView)親測避坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
Vue+ElementUI?封裝簡易PaginationSelect組件的詳細(xì)步驟
這篇文章主要介紹了Vue+ElementUI?封裝簡易PaginationSelect組件,這里簡單介紹封裝的一個Pagination-Select組件幾個步驟,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
vue2和vue3中provide/inject的基本用法示例
Vue中的provide/inject是一種組件間通信的方式,它允許父組件向子組件傳遞數(shù)據(jù),而不需要通過props或事件來實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue2/vue3中provide/inject的基本用法的相關(guān)資料,需要的朋友可以參考下2023-04-04
詳解Vue CLI3 多頁應(yīng)用實(shí)踐和源碼設(shè)計(jì)
這篇文章主要介紹了詳解Vue CLI3 多頁應(yīng)用實(shí)踐和源碼設(shè)計(jì),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
vue報錯Error:Cannot?find?module?'fs/promises'的解決方
最近的項(xiàng)目需要用到vue/cli,但是用cnpm安裝vue/cli的時候報錯了,下面這篇文章主要給大家介紹了關(guān)于vue報錯Error:Cannot?find?module?'fs/promises'的解決方式,需要的朋友可以參考下2022-11-11
vue2利用html2canvas+jspdf動態(tài)生成多頁P(yáng)DF方式
利用vue2結(jié)合html2canvas和jspdf,可以實(shí)現(xiàn)前端頁面內(nèi)容導(dǎo)出為PDF的功能,首先需要安裝相關(guān)依賴,使用html2canvas將指定div內(nèi)容捕捉為圖像,再通過jspdf將圖像轉(zhuǎn)換為PDF2024-09-09

