vue+element-ui实现优雅的emoji表情框

本文介绍了如何利用vue和element-ui来实现一个优雅的emoji表情功能。作者从amio/emoji.json获取JSON文件,创建了一个表情框组件,通过slot插槽和textarea的光标定位实现表情插入。并提供了相关的CSS样式调整和效果展示。
摘要由CSDN通过智能技术生成

终于把表情包的功能实现了😁,网上很多用本地图库、雪碧图之类的,愣是没找到几个适合我的解决方案,于是从amio/emoji.json上面找了一个JSON文件,然后简单实现了自己聊天系统上面的一个默认表情功能。

引入JSON文件

const appData = require("../static/utils/emoji.json");

Code

template

表情框组件,通过slot插槽按钮触发显示;输入框是一个textarea,我们要把点击选择的表情插入到textarea光标对应的位置之后。

<div class="chatIcon">
    <el-popover placement="top-start" width="400" trigger="click" class="emoBox">
        <div class="emotionList">
            <a href="javascript:void(0);" @click="getEmo(index)" v-for="(item,index) in faceList" :key="index" class="emotionItem">{
   {
   item}}</a>
        </div>
        <el-button
        class="emotionSelect"
        icon="iconfont icon-biaoqing"
        slot="reference"
        ></el-button>
    </el-popover>
</div>
<el-input
  v-model="textarea"
  class="chatText"
  resize="none"
  type="textarea"
  id='textarea'
  rows="5"
  @keyup.enter.native="sendInfo"
></el-input>
css

由于el-popover比较特殊,需要全局设置el-popover样式,并防止污染全局。

<style lang="scss">
/* el-popover是和app同级的,所以scoped的局部属性设置了无效 */
/* 需要设置全局style */
  .el-popover{
   
    height:200px;
    width:400px;
    overflow: scroll;
    overflow-x:auto;
  }
</style>

<style scoped>
.chatIcon {
   
  padding: 0 10px;
  font-size: 25px;
}
.emotionList{
   
  display: flex;
  flex-wrap: wrap;
  padding:5px;
}
.emotionItem{
   
  width:10%;
  font-size:20px;
  text-align:center;
}
/*包含以下四种的链接*/
.emotionItem {
   
    text-decoration: none;
}
/*正常的未被访问过的链接*/
.emotionItem:link {
   
    text-decoration: none;
}
/*已经访问过的链接*/
.emotionItem:visited {
   
    text-decoration: none;
}
/*鼠标划过(停留)的链接*/
.emotionItem:hover {
   
    text
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值