一、简介

小程序如何发送表情,微信小程序官方文档“扩展能力”为我们提供了emoji组件,即仿微信表情组件。

二、开发流程

(1)npm方式构建

//初始化项目,在node开发中使用npm init会生成一个pakeage.json文件,
//这个文件主要是用来记录这个项目的详细信息的,它会将我们在项目开发中所要用到的包,
//以及项目的详细信息等记录在这个项目中。- npm init 或 npm init -y
//安装生产环境- npm install --production
//安装vant,Vant Weapp 是移动端 Vue 组件库 Vant 的小程序版本,
//两者基于相同的视觉规范,提供一致的 API 接口,助力开发者快速搭建小程序应用。- npm i vant-weapp -S --production
//安装emoji- npm install @miniprogram-component-plus/emoji- 微信开发工具-->工具-->构建npm-  page.json引入组件:
{"usingComponents": {"mp-emoji": "@miniprogram-component-plus/emoji"}
}


(2)直接从官方组件库源码拷贝,使用方法同上。

(3)官方演示


(4)源码分析

  • 组件选择器,创建emoji实例

    const emojiInstance = this.selectComponent('.mp-emoji')
    //表情中文列表
    this.emojiNames = emojiInstance.getEmojiNames()
    //parseEmoji 解析函数
    this.parseEmoji = emojiInstance.parseEmoji
    
  • 组件渲染
    hidden控制元素显示,mp-emoji引用组件,source指定雪碧图地址,bindinsertemoji点击表情获取表情文本如“[微笑]”,binddelemoji实现删除键,bindsend实现发送键。

    <view class="reply_panel {{emojiShow ? 'show': ''}}" hidden="{{!emojiShow}}"><mp-emoji source="{{emojiSource}}" class="mp-emoji" bindinsertemoji="insertEmoji" binddelemoji="deleteEmoji" bindsend="onsend"></mp-emoji>
    </view>
    
  • 文本解析

    const = comment = '啊的四个[微笑]撒地方'
    //文本解析,type为1代表普通文本,2为表情,并给出imageClass样式。
    const parsedCommnet = parseEmoji(comment)
    [{type: 1, content: '啊的四个'},{type: 2, content: '[微笑]', imageClass: 'smiley_4'},{type: 1, content: '撒地方'},
    ]
    
  • 文本输出
    js将文本解析后输出数组,我们循环该数组。根据type属性判断文本类型,为1普通输出,为2根据imageClass指定表情图片样式。显示原理:background-image指定view元素背景视图,background-position: -66px -264px设置背景图像的起始位置,transform-origin: 0 0设置视图转换的基点,transform: scale(height/64)设置表情缩放比例。背景图片表情的尺寸为64px。

    <view class="comment"><block wx:for="{{parsedComment}}" wx:key="item"><block wx:if="{{item.type === 1}}">{{item.content}}</block><view wx:if="{{item.type === 2}}" style="display: inline-block; width: {{lineHeight}}px; height: {{lineHeight}}px"><view class="{{item.imageClass}}"style="background-image: url({{emojiSource}});transform-origin: 0 0; transform: scale({{lineHeight / 64}});"></view></view></block>
    </view>
    

小程序进阶-emoji表情相关推荐

  1. 禁止小程序输入Emoji表情符

    前言: 在小程序中<textarea>刚开始是可以输入表情符号,但是后来因为输入表情会导致一个下拉bug,所以微信就默不作声的将这个共功能给关闭了. 但是我们在开发小程序的时候,有时会涉及 ...

  2. 微信小程序解码emoji表情

    // 解码emoji表情 uncodeUtf16(str) {var reg = /\&#.*?;/g;var result = str.replace(reg, function(char) ...

  3. 小程序存emoji表情 不改变数据库

    1.小程序:提交前先编码 encodeURIComponent(data) 2.服务端解码(PHP) urldecode(data) 3.如果有空格字符串的,保存之前先对空格进行处理,不然空格在页面会 ...

  4. 微信小程序添加emoji表情组件,雪碧图版本

    预览截图: demo详细代码:https://gitee.com/mosmos_admin/wxemoji 页面引入js:emoji-parser.esm.js // 表情组件 const emoji ...

  5. h5 和 微信小程序添加emoji表情处理

    入库之前操作(数据库编码不用更改 本人用mysql): var patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则 content = c ...

  6. 微信小程序:热门表情包+头像+壁纸自动采集多分类微信小程序

    这是一款自动采集的一款微信小程序源码 内由表情包,头像,还有壁纸组合而成的一款图片小程序 每一个都自带多种分类,内容丰富运营适合 另外支持插屏广告,激励视频广告,等多种广告 小程序源码下载地址: 微信 ...

  7. 微信小程序获取带表情的微信名乱码问题

    微信小程序获取带表情的微信名乱码问题 在后台获取完微信用户数据后,对微信名进行UTF-8编码 URLEncoder.encode(nickName, "utf-8") ,将编码后的 ...

  8. 《微信小程序-进阶篇》package.json版本说明及各类版本符号详解(一)

    大家好,这是小程序系列的第十一篇文章,在这一个阶段,我们的目标是 由简单入手,逐渐的可以较为深入的了解组件化开发,并且实践积累一些后续项目也就是原神资料站中用得着的组件: 1.<微信小程序-基础 ...

  9. 《微信小程序-进阶篇》Lin-ui组件库源码分析-列表组件List(一)

    大家好,这是小程序系列的第二十篇文章,在这一个阶段,我们的目标是 由简单入手,逐渐的可以较为深入的了解组件化开发,从本文开始,将记录分享lin-ui的源码分析,期望通过对lin-ui源码的学习能加深组 ...

最新文章

  1. php mysql设置null,MySQL和PHP – 插入NULL而不是空string
  2. IDC:2018年中国制造业十大预测
  3. python常用的十进制、16进制之间的转换
  4. 文本空格_别敲空格了,Word文本对齐谨记这2招,好用到炸裂!【Word教程】
  5. 计算机图形学-MFC界面分屏操作
  6. 干货 | 搞定用户画像只需5个步骤
  7. OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()
  8. CEF与JavaScript交互读取电脑信息
  9. cocos2d 屏幕適配_cocos2dx 3.2 屏幕适配的理解
  10. We‘re sorry but XX doesn‘t work properly without JavaScript enabled. Please enable it to continue
  11. 如何检查网站死链接 分享检查死链接方法
  12. matlab 马赫带效应,matlab图像处理基础实例
  13. 【自然语言处理】BERT GPT
  14. VUEPC和手机屏幕适配
  15. 代理网易云音乐,免费听歌与下载
  16. 损失函数及对应的任务(待续)
  17. 【流媒体服务器Mediasoup】环境部署与demo搭建(二)
  18. 孤独是上天的礼物 | 真北读书
  19. 合肥八中2021年高考成绩查询,合肥八中2018高考喜报
  20. 腾讯+阿里+百度Java高频面试题(涵盖了年薪20W80W的高频面试题)

热门文章

  1. Microsoft Defender 高级威胁防护
  2. 数据库--视图的基本概念以及作用
  3. 基于Python回归模型的异方差性分析
  4. spring 定时任务的 执行时间设置规则
  5. 和谁在一起的确很重要
  6. Flutter 2.2 更新详解
  7. [web] request的Content-Type小结
  8. java坦克大战子弹不动_Javase-坦克大战小游戏,为什么会出现上方向和左方向的子弹不能发射的情况?检查了好久,有大佬帮帮忙吗,小白睡不着...
  9. java获取指定周的第一天和最后一天(周统计报表)
  10. 单选框(必选)功能的实现