前言
将表情做成图片,在聊天弹框中输入表情。
1.完整案例
1 |
|
2.重点
图片的命名方式和数组emotions相对应。
1 | var emotions = [ |
如图所示:
然后通过for循环,让所有表情在表情弹框中显示,鼠标点击哪个表情,哪个表情显示在输入框中。
补充
需要解决的问题:
1.使用div的contenteditable属性来模拟textarea标签的功能,移动端兼容性不好(兼容性可查caniuse );
2.因此,在移动端只好使用textarea,但是textarea标签只能显示文本,而不能显示图片。同时textarea输入多行时会显示滚动条。
解决方法:
如何解决textarea输入多行时会显示滚动条的问题?
解决方法:在textarea标签外用一个div包裹,将textarea的宽度(width+padding)设置的div(width)比大17-20像素,并且div设置overflow:hidden;
。
1 | .chat-input-field{ |
如何解决textarea标签只能显示文本,而不能显示图片的问题?
解决方法:在textarea显示时,将每一个表情用一个代号表示。给img标签外面的span标签自定义一个属性,然后将这个自定义属性的值作为表示表情的代号,显示在textarea中。最后,要显示时,又将代号转换为img标签。
首先,给img标签外面的span标签自定义一个属性data-href:
1 | for (var i = 0; i < emotions.length; ++i) { |
注意:之前一直获取不到自定义属性data-href,原因是没有给data-href用双引号包裹住
错误代码如下:
1
2
3
4 var emojiStr = '';
for(var i=0;i<emotions.length;i++){
emojiStr += '<span data-herf='+emotions[i] +'> <img src="images/'+ emotions[i]+ '.png"></span>';
}
然后,将这个自定义属性的值作为表示表情的代号,显示在textarea中:
1 | var value = ''; |
最后,将代号转换为img标签。
1 | var sendContentBefore = $(".chat-input-field textarea").val(); |
完整代码:
1 |
|