场景

类似于微信聊天的一个对话框,要求可以使用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表情包相关推荐

  1. linux版微信 能发表情包的,仿微信在对话框文字中插入Emoji表情包

    场景 类似于微信聊天的一个对话框,要求可以使用EMOJI表情,对话框是一个div,通过改变contentEditable属性使得内容可以编辑. 问题 Emoji表情在页面中其实是GIF格式的IMG标签 ...

  2. 仿微信在对话框文字中插入Emoji表情包

    场景 类似于微信聊天的一个对话框,要求可以使用EMOJI表情,对话框是一个div,通过改变contentEditable属性使得内容可以编辑. 问题 Emoji表情在页面中其实是GIF格式的IMG标签 ...

  3. 在博客中插入emoji表情

    在博客Markdown编辑器中插入emoji表情? 利用三种不同方法在博客.网页.markdown编辑器中插入emoji表情.? 在写博客时,经常希望能够用一些表情表达自己想法,但是默认的markdo ...

  4. markdown中插入emoji表情方法总结,让你尽情使用表情符号

    想在markdown中插入emoji表情符号,经过测试发现,在 Typora 和 CSDN的markdown编辑器下,都支持插入部分表情符号. 将插入emoji表情的方法进行总结,以方便后续使用. 各 ...

  5. mysql 不支持表情符号_mysql中插入emoji表情失败的原因与解决

    失败场景 用户昵称中存在emoji表情,调用jdbc往mysql数据库插入的时候抛出异常 java.sql.SQLException: Incorrect string value: '\xF0\x9 ...

  6. DOM--操作元素案例:分时显示不同的图片以及问候语;仿淘宝关闭标签案例;隐藏显示文本框内容;仿新浪注册页面中密码长度的判定

    分时显示不同的图片以及问候语 分析: 根据不同的时间来判断,所以需要获取到系统的时间. 利用分支语言来设置不同的图片 需要更换不同的图片,因此需要操作img的元素src 需要一个div来显示不同问候语 ...

  7. typora中插入emoji表情

    访问emoji官网,里面是所有的emoji表情 随便选择一个表情,比如:活动-奖牌奖杯-金牌.有三种方式可以在typora里面插入

  8. html在input中加超链接,如何给文本框添加超链接

    任务流程 第一步 明确任务目标 第二步 明确任务内容 第三步 根据辅导资料完成相应学习 第四步 完成任务 第五步 复习(任务/课程) 任务目标 在PowerPoint中给文字添加超链接后,文字下面会有 ...

  9. PHP处理微信中带Emoji表情的消息发送和接收(Unicode字符转码编码)

    在进行微信公众号开发者接入的时候,与用户的对话互动中,涉及到的文本信息不仅仅是文字那么简单,其中可能还会包含着各种表情字符,例如「emoji表情」. 百科:  Emoji 由于微信接口中对于emoji ...

最新文章

  1. log_archive_dest_1设置报错
  2. 数据列过滤条件常用处理
  3. mysql强制禁止使用索引_MYSQL强制使用索引和禁止使用索引
  4. iOS UITableView设置UITableViewStyleGrouped模式下section间多余间距的处理
  5. 与7无关的数(前缀和)
  6. Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)
  7. mysql可视化界面创建表_mysql安装及可视化界面
  8. 基于51单片机智能交通灯电路方案设计
  9. Struts2通配符和它的各种问题总结
  10. 动态规划处理长方形分割为正方形问题
  11. SSL 3.0 Poodle漏洞修复方法
  12. VBA 根据股票代码查询价格
  13. STM32C8T6+LORA(SX1278)
  14. HTML怎么给文本添加删除线?(代码示例)
  15. 关于华硕笔记本BIOS设置
  16. 搬:五大车载操作(VOS)系统优劣对比,车载系统架构分析
  17. 团队协作出了问题,项目经理怎么办?
  18. Android图表控件MPAndroidChart的使用
  19. 登昌恒UPMOST UTB254 USB3.0 4口扩展卡 USB3.0转PCI-E转接卡 RENES
  20. 数据一致性分析 Bland-Altman图

热门文章

  1. 提升网站运营效果的方法有哪些?网站运营有什么方法和技巧?
  2. SVAC 2.0安全系统组成
  3. CSDN修改专栏名字
  4. 大数据分析学习的详细解读
  5. 云剪智能混剪软件/批量剪辑工具技术源码框架---- 一键生成上亿条原创视频
  6. 如何用annie在B站下载视频?
  7. peewee操作mysql_Peewee 使用
  8. ClassNotFoundException,某种类的缺失
  9. NB-IoT下行链路简单实现
  10. WEB前端面试2014阿里旺旺