当前位置:首页 > VUE

input实现发送表情vue

2026-01-21 02:14:14VUE

实现表情发送功能

在Vue中实现input发送表情功能,可以通过以下方法完成:

使用第三方表情库 安装emoji-mart-vue库:

npm install emoji-mart-vue

在组件中引入并使用:

input实现发送表情vue

<template>
  <div>
    <input v-model="message" @keyup.enter="sendMessage" />
    <emoji-picker @select="addEmoji" />
    <button @click="sendMessage">发送</button>
  </div>
</template>

<script>
import { Picker } from 'emoji-mart-vue'
export default {
  components: { 'emoji-picker': Picker },
  data() {
    return {
      message: ''
    }
  },
  methods: {
    addEmoji(emoji) {
      this.message += emoji.native
    },
    sendMessage() {
      this.$emit('send', this.message)
      this.message = ''
    }
  }
}
</script>

自定义表情选择器

创建自定义表情选择器组件:

<template>
  <div class="emoji-container">
    <div v-for="emoji in emojis" :key="emoji" @click="selectEmoji(emoji)">
      {{ emoji }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      emojis: ['😀', '😂', '😍', '👍', '❤️', '🔥']
    }
  },
  methods: {
    selectEmoji(emoji) {
      this.$emit('selected', emoji)
    }
  }
}
</script>

集成到输入框

将表情选择器集成到输入框组件:

input实现发送表情vue

<template>
  <div>
    <input v-model="message" />
    <button @click="toggleEmojiPicker">表情</button>
    <emoji-picker 
      v-if="showPicker"
      @selected="addEmoji"
      @close="showPicker = false"
    />
    <button @click="send">发送</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: '',
      showPicker: false
    }
  },
  methods: {
    toggleEmojiPicker() {
      this.showPicker = !this.showPicker
    },
    addEmoji(emoji) {
      this.message += emoji
      this.showPicker = false
    },
    send() {
      this.$emit('send', this.message)
      this.message = ''
    }
  }
}
</script>

处理表情显示

在接收端显示表情时,确保HTML不被转义:

<template>
  <div v-html="parseEmojis(message)"></div>
</template>

<script>
export default {
  props: ['message'],
  methods: {
    parseEmojis(text) {
      // 简单替换表情符号为HTML实体
      const emojiMap = {
        ':)': '😊',
        ':(': '😞'
      }
      return text.replace(/:\w+:/g, match => emojiMap[match] || match)
    }
  }
}
</script>

移动端优化

针对移动端输入优化:

<template>
  <div class="input-container">
    <textarea 
      v-model="message"
      @focus="adjustInput"
      ref="input"
    ></textarea>
    <emoji-picker @selected="addEmoji" />
  </div>
</template>

<script>
export default {
  methods: {
    adjustInput() {
      // 防止键盘遮挡输入框
      setTimeout(() => {
        this.$refs.input.scrollIntoView({ behavior: 'smooth' })
      }, 300)
    },
    addEmoji(emoji) {
      const input = this.$refs.input
      const startPos = input.selectionStart
      const endPos = input.selectionEnd

      this.message = 
        this.message.substring(0, startPos) +
        emoji +
        this.message.substring(endPos)

      // 恢复光标位置
      setTimeout(() => {
        input.selectionStart = input.selectionEnd = startPos + emoji.length
        input.focus()
      }, 0)
    }
  }
}
</script>

标签: 表情input
分享给朋友:

相关文章

vue实现监听input变化

vue实现监听input变化

Vue 监听 input 变化的方法 在 Vue 中监听 input 变化可以通过多种方式实现,以下是几种常见的方法: 使用 v-model 和 watch 通过 v-model 绑定 input…

input实现js

input实现js

实现 input 元素的 JavaScript 交互 监听 input 事件 通过 addEventListener 监听 input 元素的输入变化,实时获取用户输入的值: const input…

js实现表情

js实现表情

实现表情功能的JavaScript方法 在JavaScript中实现表情功能通常涉及将特定符号或代码转换为可视化的表情图标。以下是几种常见的实现方式: 使用Unicode表情符号 直接使用Unico…

jquery获取input值

jquery获取input值

获取 input 元素的值 使用 jQuery 获取 input 元素的值可以通过 val() 方法实现。该方法适用于 <input>、<textarea> 和 <sel…

jquery获取input的值

jquery获取input的值

使用 jQuery 获取 input 值的方法 通过 ID 获取 input 值 var value = $('#inputId').val(); #inputId 是 input 元素的 ID 选…

uniapp表情包程序

uniapp表情包程序

uniapp 表情包程序开发指南 开发环境准备 确保已安装 HBuilderX 和微信开发者工具,注册并获取微信小程序 AppID。 项目结构设计 在 uniapp 项目中创建 components…