Vue3实现Emoji表情的四种方案

 更新时间:2025年01月10日 09:45:47   作者:李剑一  
聊天工具的项目开发到了表情功能,由于目前会话的输入区域使用的是 textarea 而非富文本编辑器,所以表情功能也需要兼顾 textarea 进行开发,本文给大家简单聊聊几种表情的实现方,感兴趣的小伙伴一起来看看吧

使用输入法输入表情

Textarea中支持接受输入法输入的表情,在 macOs 中直接输入“微笑”,会直接打印出😊的表情,和文字没区别。

但是这种方案不好的点在于只能手输,没办法达到选择的效果。

使用Unicode编码输入表情

在 Unicode 编码中存在对应表情的编码区间,位于基本多语言面(Basic Multilingual Plane,BMP),码点在 U+1F600 到 U+1F6FF。

因为目前使用的是 textarea 作为输入框,所以 Unicode 编码在输入框显示出来是纯文本,这就导致用户很有可能出现误修改。

另外会话信息的展示区域,现在也是直接使用的模板语法,需要在展示区使用 v-html 才能正常展示表情,否则也是纯文本。

但是基于 Unicode 编码的这种模式非常轻量,并不需要额外的库和特殊操作。

使用自定义内容进行对应

使用自定义内容进行对应,这应该是QQ的表情方案(虽然我没看过源码,纯猜测)。

QQ的输入框在使用 “/” 进行输入的时候会弹出相应的表情提示,确定以后变成表情。这里面大概率是经历了对特定编码的转换。

同理我们也可以用这种方案进行转换,可以使用特定的符号在系统中进行解析,生成表情。

比如系统中写死 “[wx]” 代表是的 😊 ,当输入框通过 input 事件监听到存在 “[wx]” 的时候,代码将其自动转换为 😊。

插个眼,后面把 Unicode 编码通过这种方式实现一下。

使用 emoji-mart-vue 插件

使用插件是性价比最高的方案,这个插件相当于直接把输入的emoji集成了,无需改造原本的代码,插入的emoji表情输入法输入的没有区别。

唯一可能存在的瑕疵可能是没办法自定义。

安装

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: '搜索结果',
                    recent: '经常使用',
                    smileys: '表情与情感',
                    people: '人物与身体',
                    nature: '动物与自然',
                    foods: '食物与饮料',
                    activity: '活动',
                    places: '旅行与地理',
                    objects: '物品',
                    symbols: '符号标志',
                    flags: '旗帜',
                    custom: 'Custom',
                    joy: '哭笑'
                }
            },
        }
    },
 computed: {
        emojiIndex() {
            return new EmojiIndex(data);
        }
    },
 methods: {
  // 选中emoji方法
        handlerEmoji(event) {
            console.log(event);
        },
 }
}
</script>

结论

想要自定义可以尝试第三种方案,现成的直接第四种方案。

到此这篇关于Vue3实现Emoji表情的四种方案的文章就介绍到这了,更多相关Vue3实现Emoji表情内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VScode中配置ESlint+Prettier详细步骤(附图文介绍)

    VScode中配置ESlint+Prettier详细步骤(附图文介绍)

    这篇文章主要介绍了VScode中配置ESlint+Prettier详细步骤,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12
  • vue+高德地图写地图选址组件的方法

    vue+高德地图写地图选址组件的方法

    这篇文章主要介绍了vue+高德地图写地图选址组件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 详解vue数组遍历方法forEach和map的原理解析和实际应用

    详解vue数组遍历方法forEach和map的原理解析和实际应用

    这篇文章主要介绍了详解vue数组遍历方法forEach和map的原理解析和实际应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • vue之computed的缓存特性

    vue之computed的缓存特性

    这篇文章主要介绍了vue之computed的缓存特性,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Vue组件实现卡片动画倒计时示例详解

    Vue组件实现卡片动画倒计时示例详解

    这篇文章主要介绍了Vue组件实现卡片动画倒计时示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Vue实现Echarts图表宽高自适应的实践

    Vue实现Echarts图表宽高自适应的实践

    本文主要介绍了Vue实现Echarts图表宽高自适应的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • vue使用npm发布自己的公网包

    vue使用npm发布自己的公网包

    本文主要介绍了vue使用npm发布自己的公网包,通过创建一个简单的npm包,本文详细阐述了从创建到发布的整个过程,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Vue3.x源码调试的实现方法

    Vue3.x源码调试的实现方法

    这篇文章主要介绍了Vue3.x源码调试的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Vue组件间通信方式全面汇总介绍

    Vue组件间通信方式全面汇总介绍

    这篇文章主要介绍了Vue组件间通信方式全面汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04
  • vue如何使用element ui表格el-table-column在里面做判断

    vue如何使用element ui表格el-table-column在里面做判断

    这篇文章主要介绍了vue如何使用element ui表格el-table-column在里面做判断问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论