vue实现文字表情同时输入的方法
时间:2022-07-23
本文章向大家介绍vue实现文字表情同时输入的方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在我们使用聊天工具进行聊天的时候经常会用到表情符号,有时我们会需要将文字与表情混输,本文就来为大家介绍一下使用vue实现文字表情混输的方法。
实现思路
利用div的contenteditable属性,让div可编辑
绑定ref属性,用于操作输入框元素
图片点击时,获取图片地址,使用require转换图片地址
创建img标签,赋值转换好的图片地址
从refs对象中获取到输入框元素,赋值创建好的img标签
实现过程
声明div可编辑,监听回车键事件,关闭拼写检查,绑定ref方便获取当前元素
<div class="input-panel" ref="msgInputContainer" @keydown.enter.exact="sendMessage($event)"
contenteditable="true" spellcheck="false"></div>
表情输入框绑定对应的事件
<div class="item-panel" v-for="item in this.emojiList" :key="item.info">
<img :src="require(`../assets/img/emoji/${item.src}`)" :alt="item.info"
@mouseover="emojiConversion($event,'over',item.src,item.hover,item.info)"
@mouseleave="emojiConversion($event,'leave',item.src,item.hover,item.info)"
@click="emojiConversion($event,'click',item.src,item.hover,item.info)">
</div>
实现表情框图片点击事件
emojiConversion: function (event, status, path, hoverPath, info) {
if (status === "over") {
event.target.src = require(`../assets/img/emoji/${hoverPath}`);
} else if (status === "click") {
// 表情输入
const imgSrc = require(`../assets/img/emoji/${hoverPath}`);
/**
* 不推荐的写法:
* 无法获取焦点
* 无法在当前焦点的位置插入元素
*/
// const imgTag = document.createElement("img");
// imgTag.src = imgSrc;
// imgTag.alt = info;
// this.$refs.msgInputContainer.appendChild(imgTag);
/**
* 推荐使用document暴露的execCommand 方法来操作此处
* 可以在当前焦点处插入元素
* 感谢评论区掘友的建议
*/
const imgTag = `<img src="${imgSrc}" width="28" height="28" alt="${info}">`;
document.execCommand("insertHTML", false, imgTag);
} else {
event.target.src = require(`../assets/img/emoji/${path}`);
}
}
踩坑记录
直接使用append()方法
一直用JQuery,类似的需求直接append,以为是js提供的方法,结果这里直接使用,答案很明显,直接将DOM字符串插入了输入框里
手动实现字符串转dom
正确的实现方法
创建DOM字符串,使用document暴露的execCommand方法来插入创建好的DOM字符串。
不过execCommand的兼容性欠佳,如果遇到没反应的情况,是你的浏览器不支持此api。
如果考虑兼容性问题可使用文中提到的另一种写法
// const imgTag = document.createElement("img");
// imgTag.src = imgSrc;
// imgTag.alt = info;
// this.$refs.msgInputContainer.appendChild(imgTag);
- TFS2010 Team Project Collections
- 基于Ext.Panel扩展一个更容易操作的Canvas
- 好玩的效果很好的Html游戏和范例
- jQuery仿极客公园火箭发射“返回顶部”效果(优化篇)
- 北京市首个无人驾驶试运营基地落户顺义
- 后rtx集成时代
- 后短信集成时代
- jQuery仿极客公园火箭发射“返回顶部”效果(WordPress代码篇)
- Windows 2008 R2 Server Core .NET环境配置
- Request——Node世界中被依赖最多的库No.2
- 在传统.NET Framework 上运行ASP.NET Core项目
- .net core快速上手
- logicaldoc的外部认证——AD集成
- CLR 4.0 安全模型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 可支持快速搜索筛选的Android自定义选择控件
- Android编程实现的短信编辑器功能示例
- SELinux 入门详解
- Android EditText限制输入字符的方法总结
- Android使用API实现图像扭曲效果示例
- linux网络配置工具的使用
- Android基于BaseExpandableListAdapter实现的二级列表仿通话记录功能详解
- Android中使用AsyncTask实现下载文件动态更新进度条功能
- 在CentOS VPS上通过SSH安装 MySQL的方法图解
- 使用vs2019进行Linux远程开发的方法步骤
- Android WebView的使用方法总结
- Android继承ViewGroup实现Scroll滑动效果的方法示例
- Linux内核设备驱动之字符设备驱动笔记整理
- Android 中在有序广播中添加自定义权限的实例
- 在 CentOS 8 上安装Jenkins的方法