在社交为王的互联网时代下,在线聊天室的概念越来越火。

前阵子,微信朋友圈里的“好友印象”、“在线1对1聊天”H5层出不穷,居然还刷了屏。这种H5通常会把两个/多个人连接起来,一旦达成这种关系,任意一方发送消息,对方都会实时收到。

实际上,主要是利用了Web Socket技术建立起的实时通信机制。但目前Web Socket技术已经被iH5封装组件化,推出易用、好用的“连接”功能,不会程序编程的小白,也能轻易上手。

以下这个H5,就是本人利用连接功能制作的1对1在线聊天室H5 Demo,在打开后把H5转给任意一名好友,即可达成连接关系,先试试吧~

接下来,我们以iH5 3.0为创作工具,分五步,分析&讲解其交互实现方法。

第一步,理解交互流程

因为是1对1连接,因此交互、体验方式会区别于一般在线聊天室,具体如下:

从画面可以看到,连接关系的搭建,需要用户自行转发给他人,将连接二次打开后才达成的。

这就意味着,系统需要自动甄别此时打开H5链接的人,是新打开的/别人转发而打开的,前者可以理解为聊天发起者,后者可以理解为聊天接收者。

此时,就有第一个交互重点:怎么甄别这个人是谁?

第二步,设定用户甄别机制

首先我们需要先将这个聊天室的雏形做出来,需要用到的功能包括:输入框、连接、文本、透明按钮等,将这些功能调整到相应的位置,如下:

(1)利用舞台属性给用加标签

我们要为舞台自定义三个初始数值为0的属性,分别是sender(发送人)、receiver(接收人)、sender_verifier(当前用户标记),这三个东西可以理解为三个容器,其含义如下:

A.sender:1对1聊天时,发出消息一方的ID

B.receiver:1对1聊天时,接收消息一方的ID

C.sender_verifier:当前打开这个H5的人的ID

为了准确地让系统知道打开H5的TA是谁,我们需要在舞台下加获取当前用户ID的事件:

此时,在H5被初始化打开时,舞台会自动为自定义属性下的“当前用户标记”内容设置成当前打开用户的ID。

系统知道此时TA的ID,对用户身份甄别有何帮助呢?

(2)用户身份甄别原理把握

上面提到的用户ID,是一串数字,就像每个手机的标识码一样,是唯一的,是身份甄别最好的前提之一。

而这个ID可以在H5被打开时自动获取得到,并且任何ID,都可以通过舞台下的“转发记录资源”事件,保存在URL(H5的链接)里。

当H5被打开,通常有两种情况:自己新打开的(无转发动作)、打开别人转发出来的(二次打开)。如果打开方式不同,对应的动作也有所差别,如下图:

上面这张图模拟出了两种打开情况,对应出的两种动作。首先,你会发现这两个方式最大的区别,在于判断sender的ID等不等于0——

A、sender ID=0,意味着此时H5是被新打开的,仍未默认数值;

上图是对此设置的事件,目的在于定义目前用户为消息发送方。由于已经判断是被新打开的,因此舞台下的“sender”属性需要设为当前用户的ID。

B、sender ID≠0,以及≠当前用户标记,意味着H5之前已经记录过舞台“sender”的信息了,而且此时sender ID并不是被标记过的ID,说明它是被转发出来二次打开的。

上图是对此设置的事件,目的在于定义目前用户为消息接收方。

这里很容易产生思路混淆,为什么作为消息接收方,会设置接收方与发送方角色互换的事件呢?这里可以用两台手机模拟场景理解:

如上图所示,因为是1对1互聊的,因此两个手机都具备sender&receiver的身份。

对于右边手机而言,别人的“sender ID”相对于收到的人来说其实就是“receiver ID”。同时,系统需要记录当前用户的ID为sender ID。

最后,为了让这些ID在被转发时会被H5记录下来,在舞台下设置一个“转发记录资源”的事件即可,资源列表选为sender ID 以及receiver ID:

第三步,设置连接成功时的反馈机制

作为聊天室转发者,我们需要知道知道连接成功的反馈,而这个反馈动作应该设立在收信人打开了H5之后,此时的“receiver ID”已经不为默认的0了。

那么我们可以让舞台初始化后,让系统判断“receiver ID”≠0,然后触发反馈机制。对于多频次的触发,我们需要用到“触发器”功能,当舞台初始化后满足“receiver ID”≠0,触发“触发器”播放。

当然,触发器就是用于触发系统给连接发送消息,事件设置如下:

需要注意的是,发送的消息包括三点:receiver ID、sender ID、提示连接成功消息,其中提示连接成功的消息,内容填为“连接成功”,以此告诉转发者已经有人连接上了。

当转发者收到这条消息时,我们需要先判断这条信息是否是发给自己的,这个是大前提,也就是得让“sender ID”等于消息数据收信人。

下一个判断,如果receiver ID=0的时候,就会把消息数据中的发信人,设置为自己的receiver ID。当这些条件满足后,为一个文本赋值连接的消息数据——消息即可,文本会自动提取消息中的“连接成功”内容。

此时,发送到连接中的转发者的“sender ID”,就对应打开者的“receiverID”,成相反关系。至此,两个人的连接顺利搭建好了。

第四步,给对方发送消息

发送消息通常通过透明按钮的点击事件控制,以点击动作触发给连接发送内容即可。

发送的内容同样包含三部分,分别为“receiver”、“sender”、“消息内容”,消息内容部分选为输入框的“内容”属性即可。

当消息发到连接后,就可以根据消息内“receiverID”,利用上面提到的身份互换性,判断此时的消息是否为手机2的“sender”本人,如果判断通过,那么就为文本赋值这条消息的内容。

此时,在连接成功后,两人就可以开始对话了。

第五步,设置断开连接机制

这也算是第二个反馈机制,当对话双方任意一人想退出聊天,只要按一下断开的按钮,系统就会自动发送消息告诉对方,这次会话要结束了,不能再发送消息。

操作很简单,当点击“断开按钮”时,让“receiver ID”复位还原成默认值“0”,同时给连接发送一个“断开连接”的消息,具体操作如下:

当然这只是转发者的属性复位了,还需将打开者的属性复位。

上一步已经给连接发了“断开连接”的消息,因此我们在连接中继续添加事件,当收到消息且消息内容为“断开连接”时,同样给“receiver ID”复位成0:

来到这一步,整个1对1聊天室的交互实现已经完成。

最后两点温馨提示:

(1)双方交换内容时,都以彼此的ID作为凭证,因此发送消息时需要附带“sender ID”和“receiverID”;

(2)每次设置完ID时,都需要加一个“转发记录资源”事件,将当前的“sender ID”和“receiverID”记录起来;

如果大家想下载这个H5作为模板进行深入研究,可以在电脑浏览器上登录iH5账号的前提下,拷贝下列网址并打开,案例会自动拷贝到你的工作台中。

案例拷贝链接:

当然,连接功能不单止能做1对1聊天室,结合Flex定位容器or其他功能,甚至你可以做出一个H5版的QQ!

快来试试吧~

html聊天室ui,震惊!这个H5居然是在线聊天室!(内附完整教程)相关推荐

  1. [内附完整源码和文档] 基于Android网络聊天室的设计与实现

    前 言 随着我国科技水平的提高和移动通讯的飞速发展与普及,人们通过移动网络可做的事情越来越多,人们之间的沟通不在局限于面对面的对话,人们通过手机可以很方便的上网并通过手机上的APP进行聊天这样既节省话 ...

  2. 基于Android的聊天软件,Socket即时通信,实现用户在线聊天

    基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节. [实例功能] 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息. 3.点击好友 ...

  3. access 导入 txt sql语句_[内附完整源码和文档] 基于C#和Access的智能聊天机器人

    一.软件说明 1.1 功能说明 一个可以自动回复的聊天机器人. 1.2 解决什么样的实际问题 用于娱乐,解闷. 1.3 性能说明 软件还存在一定的BUG,有待改进. 1.4 程序类型说明 娱乐性应用程 ...

  4. h5链接加上 vconsole_90后新中产的家,他这样把89平方装成超级大房子(内附完整购买链接)...

    刚从家里回来 不再是"金碧辉煌"和过度装饰,在90后年轻一代的眼里,家到底长什么样,和传统审美有什么区别? 今天月球设计院分享一位来自杭州的90后建筑师,自认叛逆.固执.龟毛.挑剔 ...

  5. HTML小游戏24 —— h5魂斗罗之突围游戏(附完整源码)

  6. 基于Server-Sent Event的简单在线聊天室

    一.Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览 ...

  7. 第三章、C#简单界面在线聊天室C#一对多聊天(使用TCP转发实现的在线聊天室,文章末尾附免费项目资源)

    C#网络通信系列学习笔记 第一章.C#最简单的控制台网络通信&C#最简单的控制台socket通信 第二章.C#控制台实现一对一聊天&C#socket类的简单封装 第三章.C#简单在线聊 ...

  8. 在线聊天JAVA后端_java web 在线聊天的基本实现

    随着互联网的发展,http的协议有些时候不能满足需求,比如在现聊天的实现.如果使用http协议必须轮训,或者使用长链接.必须要一个request,这样后台才能发送信息到前端. 后台不能主动找客户端通信 ...

  9. 基于Python+Django框架的多人在线聊天程序

    基于Python的多人在线聊天程序 项目简介 本项目的选题为项目六:聊天程序,具体项目任务如下所示: 经过开发,本项目最终实现了项目任务 2. 的大体功能,实现了多用户之间的在线聊天室. 项目分析 本 ...

最新文章

  1. 利用迁移助手从Oracle迁移到SQL Server
  2. 系统运维包括哪些内容_智能养老系统包括哪些?养老管理系统内容详解
  3. [NOIP2001]Car的旅行路线
  4. linq TO XML 基础
  5. logo下方显示技术支持信息_艺术与实用性的结合,iQunix Spider 屏幕显示器支架评测...
  6. 如何用阿里云容灾服务(HDR)为本地数据中心提供极致保护...
  7. SCI2012年收录的中文期刊
  8. java 获取打印机缺纸_JAVASE 语言概述和JAVA
  9. mysql增备脚本--xtrabackup实现
  10. springboot 数据权限_13 个最火的 SpringBoot 实战开源项目推荐!总有一个适合你!...
  11. 《解析几何》吕林根,徐子道第四版 习题 1.4.7,1.4.8,1.4.9
  12. win7下处理桌面文件丢失及黑屏的有效方法
  13. 存储在U盘中的文件被误删后怎么免费恢复
  14. Linux卸载驱动方法
  15. Learn1:在Power Apps平台创建第一个 Canvas App
  16. yaml使用方法_通过网络使用YAML
  17. 被拿走的雨伞——我想到的
  18. 一个运维项目的大概流程,附带20种运维开发工具
  19. web3.0能够实现吗?
  20. 静态成员函数访问非静态成员

热门文章

  1. WMS仓库管理系统有哪些功能介绍
  2. 一文读懂,WMS仓库管理系统模块功能
  3. UTF8与GBK字符编码之间的相互转换
  4. 第三届VueConf将于2019年6月8日在上海举行 转发评论送门票
  5. python使用selenium + PhantomJs搭建的简单漫画爬虫工具
  6. 飞利浦、TCL、海信、REASONANCE、七彩虹、Amazfit在CES展示最新新品 | 美通企业日报...
  7. 超级马里奥代码_任天堂源代码泄露,引出《超级马里奥64》隐藏24年的角色
  8. Android中常见的内存泄露
  9. 【C语言】输入英文标题,统计大写字母、小写字母、数字和其他字符的个数。
  10. matlab调整文字方向,MATLAB改变ylabel文字方向以及截边