当前位置:首页 > 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 focus

vue 实现 input focus

实现 input focus 的方法 在 Vue 中实现 input 元素的 focus 可以通过多种方式完成,以下是几种常见的方法: 使用 ref 和 $refs 通过 ref 属性获取 DOM…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…

vue实现输入表情

vue实现输入表情

Vue 实现输入表情的方法 在 Vue 中实现输入表情功能,可以通过以下几种方式实现: 使用 emoji 选择器组件 安装 emoji-picker-vue 或其他类似的 emoji 选择器库:…

vue 实现input封装

vue 实现input封装

封装 Input 组件的基本实现 在 Vue 中封装 Input 组件可以通过创建一个可复用的自定义组件来实现,以下是一个基础示例: 创建 Input 组件文件 (BaseInput.vue)…

vue实现input中number

vue实现input中number

Vue 实现 input 中 number 类型输入 在 Vue 中实现 input 的 number 类型输入,可以通过以下几种方式确保输入内容为数字,同时处理数据绑定和验证。 使用 v-m…