Vue - 详情介绍v-emoji-picker、vue3-emoji-picker和vue3-emoji表情包组件

news2024/11/26 4:44:28

Vue - 详情介绍v-emoji-picker、vue3-emoji-picker和vue3-emoji表情包组件

本篇详情介绍在Vue2.x和Vue3.x中使用(emoji)表情包组件,通过提供直观、易于使用的emoji表情选择功能,增强用户在使用Web应用时的表达力和互动性。

1. v-emoji-picker(vue2)

安装:

npm install v-emoji-picker

yarn add v-emoji-picker

引用(在main.js):

import Vue from 'vue'
import App from './App.vue'
import VEmojiPicker from 'v-emoji-picker';

Vue.config.productionTip = false

Vue.use(VEmojiPicker);

new Vue({
  render: h => h(App),
}).$mount('#app')

使用:

<template>
  <div id="app">
     <span class="title">v-emoji-picker</span>
     <VEmojiPicker @select="onSelectEmoji" />
     <span class="text">输出:{{text}}</span>
  </div>
</template>

<script>
export default {
  data(){
    return{
      text:''
    }
  },
  methods: {
    onSelectEmoji(emoji) {
      this.text += emoji.data
    },
  }
};
</script>

在这里插入图片描述
属性(Props):

{
  customEmojis: Array<IEmoji>, // 默认:[],自定义表情符号数组
  customCategories: Array<ICategory>, // 默认:[],自定义分类数组
  limitFrequently: number, // 默认:15,频繁使用的表情限制数量
  emojisByRow: number, // 默认:5,每行的表情数
  continuousList: boolean, // 默认:false,是否连续滚动列表
  emojiSize: number, // 默认:32,表情大小
  emojiWithBorder: boolean, // 默认:true,表情是否有边框
  showSearch: boolean, // 默认:true,是否显示搜索功能
  showCategories: boolean, // 默认:true,是否显示分类选项
  dark: boolean, // 默认:false,暗黑模式
  initialCategory: string, // 默认:"Peoples",初始类别
  exceptCategories: Array<ICategory>, // 排除的类别数组,默认:[]
  exceptEmojis: Array<IEmoji>, // 排除的表情符号数组,默认:[]
  i18n: Object, // 国际化对象
}

事件(Events):

{
  select: '选中表情时触发',
  changeCategory: '切换分类时触发'
}

2. vue3-emoji-picker(vue3)

安装:

重要提示: 如果使用 TypeScript,请在 .d.ts 文件中添加 declare module ‘vue3-emoji-picker’.

npm install vue3-emoji-picker

yarn add vue3-emoji-picker

引用并使用:

<template>
  <div class="Com_view">
    <div class="emoje_1 box_emoje">
      <span>vue3-emoji-picker</span>
      <EmojiPicker :native="true" @select="onVue3EmojiPicker" />
      <span>输出:{{ text_1 }}</span>
    </div>
  </div>
</template>

<script setup>
import { ref } from "vue";
import EmojiPicker from "vue3-emoji-picker";
import "vue3-emoji-picker/css";

const text_1 = ref("");

const onVue3EmojiPicker = (emoji) => {
  text_1.value += emoji.i;
  /* 结果示例
  { 
      i: "ernes", // 表情图标
      n: ["kissing face"], 
      r: "1f61a", // 包含肤色
      t: "neutral", // 肤色
      u: "1f61a" // 不带肤色
  }
  */
};
</script>

在这里插入图片描述
属性(Props):

属性类型默认值描述
nativeboolfalse是否使用系统原生表情代替图片。
hide-searchbooltrue显示或隐藏搜索输入框。
hide-group-iconsboolfalse显示或隐藏分组图标。
hide-group-namesboolfalse显示或隐藏分组名称。
disable-sticky-group-namesboolfalse禁用分组名称的固定位置显示。
disable-skin-tonesboolfalse禁用肤色选择。
disabled-groupsarr[]禁用特定的分组或类别。参见可用分组。
group-namesobj{}更改任意分组名称。参见默认分组名称。
static-textsobj{}参考静态文本选项表。
pickerTypestr‘’选择选择器类型,可能的选项:input、textarea(弹出输入框或文本区域),‘’。
modestr‘insert’选择插入模式,可能的选项:prepend、insert、append。
offsetint6设置表情弹窗的偏移量。
additional-groupsobj{}添加自定义分组,键为从蛇形命名转换过来的分组名称。
group-orderarr[]覆盖分组的排序。
group-iconsobj{}通过在键上传递 SVG 来覆盖分组图标。
display-recentboolfalse显示最近使用的表情。
themestr‘light’可选值:‘light’、‘dark’、‘auto’。

静态文本选项 (props[‘static-texts’]):

属性类型默认值描述
placeholder字符串“Search emoji”更新搜索输入框的占位符文本。
skinTone字符串“Skin tone”底部肤色按钮的文本。

示例: :static-texts=“{ placeholder: ‘搜索单元格’}”

事件与回调:

方法名示例描述
@select<EmojiPicker @select=“onSelectEmoji” />当选择/点击一个表情时触发此事件,事件回调的第一个参数接收所选的表情。
@update:textEmojiPicker @update:text=“onChangeText” />当输入文本发生变化时触发此事件,事件回调的第一个参数接收改变后的文本。

默认分组名称:

{
  "smileys_people": "微笑与人物",
  "animals_nature": "动物与自然",
  "food_drink": "食物与饮料",
  "activities": "活动",
  "travel_places": "旅行与地点",
  "objects": "物体",
  "symbols": "符号",
  "flags": "旗帜"
}

3. vue3-emoji(vue3)

安装:

npm install vue3-emoji

yarn add vue3-emoji

引用并使用:

<template>
  <div class="Com_view">
    <div class="emoje_2 box_emoje">
      <span>vue3-emoji</span>
      <V3Emoji
        @click-emoji="onVue3Emoje"
        :recent="true"
      ></V3Emoji>
      <span>输出:{{ text_2 }}</span>
    </div>
  </div>
</template>

<script setup>
import { ref } from "vue";
import V3Emoji from "vue3-emoji";
import "vue3-emoji/dist/style.css";

const text_2 = ref("");

const onVue3Emoje = (val) => {
  text_2.value += val;
};
</script>

在这里插入图片描述
属性(Props):

配置名类型默认值描述
v-modelstring‘’可以进行数据的双向绑定(需要开启textArea)
size‘mid’、‘small’、‘big’、mid用于调整整体大小
theme‘dark’、‘default’default主题切换 支持亮色和暗黑主题
manualClosebooleanfalse设置为true可以手动控制弹出框的关闭
optionsName-{}翻译原有板块名字
disableGroupstring[]禁用某些板块
defaultSelectstring‘Smileys & Emotion’默认选中板块,注意:如果指定了新名字,需要传入新名字
recentbooleanfalse开启最近使用emoji功能
fulldatabooleanfalse如果指定为true 那么clickEmoji事件将会传出一个EmojiItem类型的对象
keepbooleanfalse如果指定为true 那么表情框关闭将不会销毁组件
textAreabooleanfalse开启文本框功能选项
textAreaOptionEmoji.TextAreaOptions见类型定义你可以定义textarea的一些选项
fixPos六个值FixType可以传入一个值来固定表情框的位置
customSizeEmoji.CustomSize见类型定义如果指定了相应的自定义大小,那么会将pollup表情选择框的大小重置,没有指定的将使用相应size的默认值
customThemeEmoji.CustomTheme见类型定义自定义主题颜色,支持五个选项的配置,没有指定的依旧会使用指定的theme的默认值
customIconEmoji.CustomIcon见类型定义自定义tab切换栏的显示
customTabEmoji.ObjectItem见类型定义你可以传入一个对象来指定一个新的选项卡,这个选项卡内可以放置你需要的emoji
unicodeVersionnumber11在某些设备上可能不能兼容高版本的emojiunicode
skin-none暂时无法很好的支持

fixPos = ‘upleft’ | ‘upright’ | ‘upcenter’ | ‘downleft’ | ‘downright’ | ‘downcenter’; //控制表情弹出框的位置

可自定义按钮:

  <V3Emoji
        @click-emoji="onVue3Emoje"
        :recent="true">	
        <div class="my-btn">
           <button>表情包按钮</button>
        </div>
   </V3Emoji>

在这里插入图片描述

不同弹窗尺寸(big、small、mid):

<template>
  <div>
      <V3Emoji size="big" />
      <V3Emoji size="small" />
      <V3Emoji size="mid" />
  </div>
</template>

在这里插入图片描述
支持了暗黑主题:

<template>
  <div>
      <V3Emoji theme="dark" />
  </div>
</template>

在这里插入图片描述
支持了最近常用表情:

<template>
  <div>
      <V3Emoji :recent="true" />
  </div>
</template>

在这里插入图片描述
通过default-select指定默认的选项卡:

<template>
  <div>
  	  <!--默认tab-->
      <V3Emoji default-select="Animals & Nature" />
      <!--设为默认tab (tab名) -->
      <V3Emoji default-select="Activities" :recent="true" />
  </div>
</template>

在这里插入图片描述
fulldata
你可以通过指定fulldata来接受完整的emojiItem

<V3Emoji
         :disable-group="disableGroup"
         @click-emoji="appendText"
         :options-name="optionsName"
         :recent="true"
         :fulldata="true"
         />
//会接受到该参数
{ "emoji": "🧨", "skin_tone_support": false, "name": "firecracker", "slug": "firecracker", "unicode_version": "11.0", "emoji_version": "11.0" }

optionsName
你可以通过传入optionsName来自定义各个板块的名字

<script setup>
const optionsName = {
 'Smileys & Emotion': '笑脸&表情',
 'Food & Drink': '食物&饮料',
 'Animals & Nature': '动物&自然',
 'Travel & Places': '旅行&地点',
 'People & Body': '人物&身体',
 Objects: '物品',
 Symbols: '符号',
 Flags: '旗帜',
 Activities: '活动'
};
</script>
<template>
	<V3Emoji :options-name="optionsName"/>
</template>

disableGroup
同时,你也可以传入disableGroup来禁用相应的板块

<script setup lang="ts">
import V3Emoji from './components/V3Emoji.vue';
const inputText = ref('');
const appendText = (val: string) => {
  inputText.value += val;
};
const optionsName = {
  'Smileys & Emotion': '笑脸&表情',
  'Food & Drink': '食物&饮料'
};
const disableGroup = ['食物&饮料'];
//禁用了食物&饮料的选项卡
</script>

<template>
	<V3Emoji :disable-group="disableGroup" :options-name="optionsName" />
</template>

keep
如果你需要在使用完表情框后保持原本打开的状态,可以指定keep来开启保持状态

<V3Emoji :keep="true"/>

fixPos
通过fixpos 可以固定表情弹出框的位置,默认情况下表情弹出框会随着滚动条和屏幕上下移动而变化

<V3Emoji fix-pos="upright" // or 'upcenter'| 'upleft' |'downright' |'downcenter'|'downleft' />

customSize
利用customSize 你可以自定义表情框的大小

<script setup lang="ts">
const customSize= {
  'V3Emoji-width': '300px',
  'V3Emoji-height': '20rem',
  'V3Emoji-fontSize': '1rem',
  'V3Emoji-itemSize': '50px'
};
</script>
<template>
<div class="test">
    <V3Emoji size="big" :custom-size="customSize" />
    <p>customSize</p>
</div>
</template>

customTab
如果你需要自己自定义一些emoji并且将其放到新的板块中,你可以这么做

<script setup lang="ts">
const customTab= {
  我的自定义板块: [
    {
      emoji: '🍔',
      name: '汉堡包'
    },
    {
      emoji: '🍟',
      name: '薯条'
    }
  ]
};
</script>
<template>
<div class="test">
    <V3Emoji  :customTab="customTab" default-select="我的自定义板块" />
    <p>customTab</p>
</div>
</template>

customIcon
本组件会默认读取数据中的第一个emoji作为默认的icon 你可以通过customIcon来定义下方选择的Icon

<script setup lang="ts">
const customIcon = {
  'Smileys & Emotion': '😚',
  'Food & Drink': '🍔',
  'Animals & Nature': '🐶',
  Activities: '🎉',
  'Travel & Places': '🚗',
  Objects: '💰'
};
</script>
<template>
<div class="test">
    <V3Emoji  :customIcon="customIcon"  />
    <p>customIcon</p>
</div>
</template>

customTheme
本组件提供了自定义的主题功能,你可以自定义主题色

<script setup lang="ts">
const customTheme= {
  'V3Emoji-hoverColor': '#ff5500',
  'V3Emoji-activeColor': '#99ff77',
  'V3Emoji-shadowColor': 'rgba(255,255,0,0.5)',
  'V3Emoji-backgroundColor': '#000000',
  'V3Emoji-fontColor': '#ffffff'
};
</script>
<template>
<div class="test">
    <V3Emoji size="mid" :custom-theme="customTheme" />
    <p>customTheme</p>
</div>
</template>

方法(Function):

方法名类型说明
closePop()=>void关闭表情弹出框

事件(Events)

事件名事件类型说明
clickEmoji(val:stringEmojiItem)=>void
closevoid表情框关闭时触发的事件
changeText(val:string)=>void用于接受文本框改变时触发的事件

类型定义以及默认值(@types)

declare namespace Emoji {
  interface EmojiItem {
    emoji: string;
    name: string;
    skin_tone_support?: boolean;
    unicode_version?: string;
    emoji_version?: string;
    skin_tone_support_unicode_version?: string;
  }
  interface ObjectItem {
    [key: string]: EmojiItem[];
  }
  interface CustomItem {
    src: string;
    name: string;
  }
  interface JsonData {
    [key: string]: any;
  }
  interface TextAreaOptions {
    placeholder?: string;
    rows?: number;
    cols?: number;
    resize?: StyleValue;
  }
  interface CustomSize {
    [key: string]: string;
    'V3Emoji-width': string; // emoji的宽度
    'V3Emoji-height': string; // height is optional
    'V3Emoji-fontSize': string; //emoji的大小
    'V3Emoji-itemSize': string; //每一项的大小
  }
  interface CustomIcon {
    [key: string]: string;
  }
   type FixType = 'upleft' | 'upright' | 'upcenter' | 'downleft' | 'downright' | 'downcenter';
  interface CustomTheme {
    [key: string]: string;
    'V3Emoji-backgroundColor': string;
    'V3Emoji-hoverColor': string;
    'V3Emoji-activeColor': string;
    'V3Emoji-shadowColor': string;
  }
}

参考设置/example options
通过以下设置将所有选项卡变成中文

<script>
    const optionsName = {
        'Smileys & Emotion': '笑脸&表情',
        'Food & Drink': '食物&饮料',
        'Animals & Nature': '动物&自然',
        'Travel & Places': '旅行&地点',
        'People & Body': '人物&身体',
        Objects: '物品',
        Symbols: '符号',
        Flags: '旗帜',
        Activities: '活动'
    };
</script>

<template>
	<V3Emoji :options-name="optionsName"/>
</template>

上面介绍三个Vue的emoji表情包组件自定义比较高,可根据项目需求去修改,且安装使用流程简单明了,有需要的小伙伴们可以点点赞收藏一下!

V-Emoji-Picker:V-Emoji-Picker 项目地址
vue3-emoji-picker:vue3-emoji-picker 项目地址
vue3-emoji:vue3-emoji 项目地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux驱动开发基础(总线驱动设备模型)

所学来自百问网 目录 1.驱动设计的思想&#xff1a;面向对象/分层/分离 1.1 面向对象 1.2 分层 1.3 分离 2.总线驱动设备模型 2.1 相关函数和结构体 2.1.1 platform_device 2.1.2 platform_driver 2.1.3 相关函数 2.2 platfrom_driver和platfrom_device的注册过程 …

解决麒麟 V10 SP1 升级 Python 后 Yum 不可用问题

目录 一、前提概要 二、解决办法 1、卸载原有的 python 2、安装 Python 3.7.9 rpm 3、安装一系列 yum 相关 rpm 4、rpm 包下载 一、前提概要 在部署 gaussDB 的时候&#xff0c;安装代理时要求 python 版本满足 3.7.9&#xff0c;但已安装的麒麟 V10 内集成的 python 版…

GitHub Actions 遭利用,14个热门开源项目令牌泄露风险激增

近日&#xff0c;有攻击者通过 CI/CD 工作流中的 GitHub Actions 工具窃取了谷歌、微软、AWS 和 Red Hat 等多个知名开源项目的 GitHub 身份验证令牌。 窃取这些令牌的攻击者可在未经授权的情况下访问私有存储库、窃取源代码或向项目中注入恶意代码。 Palo Alto Networks Un…

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

开发环境搭建与点亮LED 文章目录 开发环境搭建与点亮LED1、STM32F103C8T6及STM32 Blue Pill 介绍2、下载并安装STM32CubeIDE3、编程并点亮LED3.1 在Stm32CubeIDE中编写第一个STM32程序3.1.1 创建项目3.1.2 设备配置3.1.2.1 系统时钟配置3.1.2.2 系统调试配置3.1.2.3 GPIO配置3.…

饲料粉碎加工:玉米豆粕小麦秸秆破碎机械设备

饲料粉碎机是一种专门用于将各种原料如玉米、小麦、豆粕、秸秆等物料进行破碎、细化的机械设备。其工作原理主要依赖于旋转的刀盘或锤片&#xff0c;在高速旋转过程中产生强大的冲击力和剪切力&#xff0c;将物料粉碎至所需粒度。这一过程不仅提高了饲料的利用率&#xff0c;还…

鸿蒙环境和模拟器安装

下载华为开发者工具套件&#xff0c;并解压 https://developer.harmonyos.com/deveco-developer-suite/enabling/kit?currentPage1&pageSize10 双击dmg安装ide 复制并解压sdk 安装模拟器 https://yuque.antfin-inc.com/ainan.lsd/cm586u/po19k1mi9b2728da?singleDoc#…

Unity大场景切换进行异步加载时,如何设计加载进度条,并配置滑动条按照的曲线给定的速率滑动

一、异步加载场景的过程 1、异步加载场景用到的API LoadSceneAsync 2、异步加载的参数说明 &#xff08;1&#xff09;默认参数&#xff1a;SceneManagement.LoadSceneAsync(“SceneName”); AsyncOperation task SceneManager.LoadSceneAsync("SceneName");&a…

James Forshaw的.NET Remoting反序列化升级版之TypeFilterLevel.Low模式无文件payload任意代码执行

引用 这篇文章的目的是介绍一款基于James Forshaw的.NET Remoting反序列化工具升级版在TcpServerChannel的TypeFilterLevel.Low模式无文件payload任意代码执行poc的开发心得 文章目录 引用简介.NET Remoting的应用程序通道介绍.NET Remoting的应用程序利用场景介绍扩展ysoseria…

【卫星影像地图API】常见地图服务_WMS_WFS_WCS_ WMTS

地图服务作为一种展现数据集的良好方式&#xff0c;为地理信息的共享起到重要作用。本文将介绍常见地图服务的相关内容。 网络地图服务&#xff08;WMS&#xff09; &#xff08;1&#xff09;概念 网络地图服务 (Web Map Service&#xff0c;WMS)指从地理信息动态产生具有地…

Docker最佳实践进阶(二):Docker Compose容器编排

大家好&#xff0c;在上篇文章中博主演示了Dockerfile常用的命令&#xff0c;以及如何利用Dockerfile构建镜像&#xff0c;生成容器服务&#xff0c;但是在实际应用环境中&#xff0c;特别是在微服务架构中&#xff0c;一个应用系统可能包含多个微服务&#xff0c;每个微服务可…

遇到的基本问题

遇到的基本问题 Linux常用操作 1、关闭防火墙、配置本地yum源、添加静态网卡 systemctl stop firewalld if [ getenforce "Enforcing" ];thensetenforce 0 fi sleep 3 echo "防火墙和selinux高级权限管理已关闭" ############ #添加静态网卡 #########…

配置访问权限|预防数据泄漏

IT行业正在以闪电般速度发展&#xff0c;而网络攻击也随之激增。在今年4月份的IT数据泄漏报告中&#xff0c;教育行业数据泄漏事件数量最多&#xff0c;其次是医疗保健行业、IT服务和软件行业。 为什么有许多数据泄漏事件&#xff1f; 通常是由于缺乏访问权限的认证&#xff0…

渗透实战——为喜欢的游戏“排忧解难”

本文仅用于技术研究学习&#xff0c;请遵守相关法律&#xff0c;禁止使用本文所提及的相关技术开展非法攻击行为&#xff0c;由于传播、利用本文所提供的信息而造成任何不良后果及损失&#xff0c;与本账号及作者无关。 资料查询来源- 安全社区与AI模型结合探索【文末申请免费…

了解数据库中常用存储引擎数据结构(4)

目录 深入了解LSM树及其发展 一条数据的整体写入过程 读操作&#xff08;Bloom Filter优化&#xff09; 合并策略&#xff08;Merging Policy&#xff09; LSM-Tree并发控制机制 一些Compaction优化方案 深入了解LSM树及其发展 LSM Tree 的概念起源于 1996年的论文《The…

【网络工程师模拟面试题】(2)OSPF区域划分与LSA细节

一、OSPF中心结点与周围200个路由器节点建立邻居&#xff0c;该如何划分区域&#xff0c;为什么&#xff1f; 这个问题其实没有标准答案&#xff0c;因为据OSPF RFC标准文档(RFC 2328 OSPF Version 2)来看&#xff0c;其中内容并没有规定OSPF单区域的邻居数量限制&#xff0c;…

【鸿蒙学习】HarmonyOS应用开发者基础 - 从网络获取数据

学完时间&#xff1a;2024年8月15日 一、前言叨叨 学习HarmonyOS的第七课&#xff0c;人数居然反超到了3735名了&#xff0c;难道前面的那一课&#xff0c;这么多人挂科了吗。不过这一节的内容稍微简单一些&#xff0c;都是网络相关知识。 <HarmonyOS第一课>从网络获取…

【Angular18】封装自定义组件

1. 准备组件 2. 创建打包文件夹及部分配置文件 创建 文件夹app-legalentities-root拷贝组件源文件到新的文件夹app-legalentities中创建文件 .npmrc registry发布地址always-authtrue创建文件 ng-package.json {"$schema": "./node_modules/ng-packagr/ng-pac…

FChen的408学习日记--三次握手和四次握手

一、三次握手 在建立连接的过程中&#xff0c;首先SYN1&#xff0c;随机发送sqex。服务器接受后要反过来对客户端发送连接请求&#xff0c;SYN1&#xff0c;随机发送sqey&#xff0c;ackx1。然后客户端还要发送连接确认报文&#xff0c;原因如下 例题&#xff1a; 二、四次…

WeiXin Bill Record

WeiXin Bill Record 微信账单记录查询流程 【我】 【钱包】 【账单】 选中一笔【查询对象】的交易记录 【查看往来转账】 【导出凭证】 选择查询开始时间&#xff0c;结束时间&#xff1b;【申请】 【验证】 【同意】协议 进入人脸识别 【申请】 【查看详情】 【确定】

SaaS中如何应用AIGC:智能赋能,引领未来

引言 在数字化浪潮的推动下&#xff0c;SaaS&#xff08;软件即服务&#xff09;已成为企业数字化转型的重要工具。而 AIGC 作为人工智能领域的前沿技术&#xff0c;正逐步渗透到SaaS的各个环节&#xff0c;为企业带来前所未有的智能化体验。 一、智能客服与自动化服务 在Saa…