php文本框添加表情,仿微信在对话框文字中插入Emoji表情包
场景
类似于微信聊天的一个对话框,要求可以使用EMOJI表情,对话框是一个div,通过改变contentEditable属性使得内容可以编辑.
问题
Emoji表情在页面中其实是GIF格式的IMG标签.如果直接在innerHTML中改变,会导致表情包只出现在文本最后,所以这样是不符合用户体验的,需要跟踪光标的位置.在用户点击文本或者文本框失去焦点时候保存光标位置,点击表情时在光标最后位置插入.
div.innerHTML +=
思路
1.webkit内核的浏览器中可以直接使用getSelection()获取selection对象.以及其中的range对象
range(范围)指的是文档中连续的一部分。一个范围包括整个节点,也可以包含节点的一部分,例如文本节点的一部分。用户通常下只能选择一个范围
var selObj = window.getSelection();
var range = selObj.getRangeAt(0);
在div的onclick以及onblur事件中绑定保存光标位置
saveSelection() {
this.lastEditRange = window.getSelection().getRangeAt(0);
}
2.在添加表情事件触发时,首先检查是否存在光标位置,如果存在则在最后位置插入,不存在就在文本末尾插入
// 判断是否有最后光标对象存在
if (this.lastEditRange) {
// 存在最后光标对象,选定对象清除所有光标并添加最后光标还原之前的状态
selection.removeAllRanges()
selection.addRange(this.lastEditRange)
}
3.最后就是对光标位置的处理
// 如果是文本节点则先获取光标对象
var range = selection.getRangeAt(0)
// 获取光标对象的范围界定对象,一般就是textNode对象
var frag;
if (range.createContextualFragment) {
frag = range.createContextualFragment(emojiInput);
} else {
var container = document.createElement("div");
container.innerHTML = emojiInput;
frag = document.createDocumentFragment();
var child;
var title;
for (; child = container.firstChild;) {
title = frag.appendChild(child);
}
}
var node = frag.lastChild;
range.insertNode(frag);
range.setStartAfter(node);
selection.removeAllRanges();
selection.addRange(range);
4.最后还是要保存一次光标位置.
效果展示
php文本框添加表情,仿微信在对话框文字中插入Emoji表情包相关推荐
- linux版微信 能发表情包的,仿微信在对话框文字中插入Emoji表情包
场景 类似于微信聊天的一个对话框,要求可以使用EMOJI表情,对话框是一个div,通过改变contentEditable属性使得内容可以编辑. 问题 Emoji表情在页面中其实是GIF格式的IMG标签 ...
- 仿微信在对话框文字中插入Emoji表情包
场景 类似于微信聊天的一个对话框,要求可以使用EMOJI表情,对话框是一个div,通过改变contentEditable属性使得内容可以编辑. 问题 Emoji表情在页面中其实是GIF格式的IMG标签 ...
- 在博客中插入emoji表情
在博客Markdown编辑器中插入emoji表情? 利用三种不同方法在博客.网页.markdown编辑器中插入emoji表情.? 在写博客时,经常希望能够用一些表情表达自己想法,但是默认的markdo ...
- markdown中插入emoji表情方法总结,让你尽情使用表情符号
想在markdown中插入emoji表情符号,经过测试发现,在 Typora 和 CSDN的markdown编辑器下,都支持插入部分表情符号. 将插入emoji表情的方法进行总结,以方便后续使用. 各 ...
- mysql 不支持表情符号_mysql中插入emoji表情失败的原因与解决
失败场景 用户昵称中存在emoji表情,调用jdbc往mysql数据库插入的时候抛出异常 java.sql.SQLException: Incorrect string value: '\xF0\x9 ...
- DOM--操作元素案例:分时显示不同的图片以及问候语;仿淘宝关闭标签案例;隐藏显示文本框内容;仿新浪注册页面中密码长度的判定
分时显示不同的图片以及问候语 分析: 根据不同的时间来判断,所以需要获取到系统的时间. 利用分支语言来设置不同的图片 需要更换不同的图片,因此需要操作img的元素src 需要一个div来显示不同问候语 ...
- typora中插入emoji表情
访问emoji官网,里面是所有的emoji表情 随便选择一个表情,比如:活动-奖牌奖杯-金牌.有三种方式可以在typora里面插入
- html在input中加超链接,如何给文本框添加超链接
任务流程 第一步 明确任务目标 第二步 明确任务内容 第三步 根据辅导资料完成相应学习 第四步 完成任务 第五步 复习(任务/课程) 任务目标 在PowerPoint中给文字添加超链接后,文字下面会有 ...
- PHP处理微信中带Emoji表情的消息发送和接收(Unicode字符转码编码)
在进行微信公众号开发者接入的时候,与用户的对话互动中,涉及到的文本信息不仅仅是文字那么简单,其中可能还会包含着各种表情字符,例如「emoji表情」. 百科: Emoji 由于微信接口中对于emoji ...
最新文章
- log_archive_dest_1设置报错
- 数据列过滤条件常用处理
- mysql强制禁止使用索引_MYSQL强制使用索引和禁止使用索引
- iOS UITableView设置UITableViewStyleGrouped模式下section间多余间距的处理
- 与7无关的数(前缀和)
- Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)
- mysql可视化界面创建表_mysql安装及可视化界面
- 基于51单片机智能交通灯电路方案设计
- Struts2通配符和它的各种问题总结
- 动态规划处理长方形分割为正方形问题
- SSL 3.0 Poodle漏洞修复方法
- VBA 根据股票代码查询价格
- STM32C8T6+LORA(SX1278)
- HTML怎么给文本添加删除线?(代码示例)
- 关于华硕笔记本BIOS设置
- 搬:五大车载操作(VOS)系统优劣对比,车载系统架构分析
- 团队协作出了问题,项目经理怎么办?
- Android图表控件MPAndroidChart的使用
- 登昌恒UPMOST UTB254 USB3.0 4口扩展卡 USB3.0转PCI-E转接卡 RENES
- 数据一致性分析 Bland-Altman图