搜索组件或模块
grid 栅格布局
admin 后台布局
color 颜色
iconfont 字体图标
animation 动画
button 按钮
form 表单组
input 输入框
select 下拉选择框
checkbox 复选框
switch 开关
radio 单选框
textarea 文本域
nav 导航菜单
breadcrumb 面包屑
tabs 选项卡
progress 进度条
collapse 折叠面板/手风琴
table 表格元素
badge 徽章
timeline 时间线
blockquote 引用块
fieldset 字段集
hr 分割线
layer 弹出层/弹窗综合
laydate 日期时间选择器
layim 即时通讯/聊天
laypage 分页
laytpl 模板引擎
form 表单模块
table 数据表格
upload 文件/图片上传
element 常用元素操作
carousel 轮播/跑马灯
layedit 富文本编辑器
tree 树形菜单
flow 信息流/图片懒加载
util 工具集
code 代码修饰

LayIM 开发者文档

当前文档适用于 LayIM PC端 最新版,如果你正在了解的并非该版本,你可以前往其它版本阅览: LayIM 移动版文档
在WebIM似乎已被打入冷宫的今天,LayIM正试图重新为网页带来一些社交想象。作为一款Web即时通讯前端解决方案(服务端需自写),LayIM提供了全方位的前端接口支撑,不仅能让您更高效地接入到自己的通讯服务中,更能让你轻松地与 环信融云野狗 等第三方通讯服务平台对接。LayIM始终坚持极简的体验,致力于拉近你的用户在web间的距离。

LayIM兼容除IE6/7以外的所有浏览器,如果你的网站仍需兼容ie6/7,那么强烈建议你说服你的老板或者客户。
模块加载名称:layim,官网地址:layim.layui.com
开始使用

LayIM基于layui模块体系,因此你获得的其实是一个包含LayIM的layui框架,不同的是,开源版的layui并不包含LayIM。捐赠后,将您获得的压缩包解压,将layui整个目录文件放入你的项目后,不用再对其代码做任何修改(方便下次升级)。然后您只需引入下述两个文件即可。

codelayui.code

  1. ./build/css/layui.css
  2. ./build/layui.js


假如你将layui放入你的/static/目录中,并且你的html页面在根目录,那么一个最直接的例子是:

codelayui.code

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>LayIM测试</title>
  6. <link rel="stylesheet" href="/static/build/layui.css" media="all">
  7. </head>
  8. <body>
  9. <script src="/static/build/layui.js"></script>
  10. <script>
  11. layui.use('layim', function(layim){
  12. //先来个客服模式压压精
  13. layim.config({
  14. brief: true //是否简约模式(如果true则不显示主面板)
  15. }).chat({
  16. name: '客服姐姐'
  17. ,type: 'friend'
  18. ,avatar: 'http://tp1.sinaimg.cn/5619439268/180/40030060651/1'
  19. ,id: -2
  20. });
  21. });
  22. </script>
  23. </body>
  24. </html>

通过上述方式,便可成功加载layim。当然,你仅仅只是看到了一个"客服姐姐"的聊天面板,这等同于:Hello World!
向“客服姐姐”问好后就忘了它吧,这份文档才刚刚开始。

初始化配置

一个你必须认识的方法:layim.config(options)
控制着许多重要的配置,基本上一个完整LayIM实例的构成由它而开始,它允许你自由设定以下参数:

codelayui.code

  1. layui.use('layim', function(layim){
  2. //基础配置
  3. layim.config({
  4. init: {} //获取主面板列表信息,下文会做进一步介绍
  5. //获取群员接口(返回的数据格式见下文)
  6. ,members: {
  7. url: '' //接口地址(返回的数据格式见下文)
  8. ,type: 'get' //默认get,一般可不填
  9. ,data: {} //额外参数
  10. }
  11. //上传图片接口(返回的数据格式见下文),若不开启图片上传,剔除该项即可
  12. ,uploadImage: {
  13. url: '' //接口地址
  14. ,type: 'post' //默认post
  15. }
  16. //上传文件接口(返回的数据格式见下文),若不开启文件上传,剔除该项即可
  17. ,uploadFile: {
  18. url: '' //接口地址
  19. ,type: 'post' //默认post
  20. }
  21. //扩展工具栏,下文会做进一步介绍(如果无需扩展,剔除该项即可)
  22. ,tool: [{
  23. alias: 'code' //工具别名
  24. ,title: '代码' //工具名称
  25. ,icon: '&#xe64e;' //工具图标,参考图标文档
  26. }]
  27. ,msgbox: layui.cache.dir + 'css/modules/layim/html/msgbox.html' //消息盒子页面地址,若不开启,剔除该项即可
  28. ,find: layui.cache.dir + 'css/modules/layim/html/find.html' //发现页面地址,若不开启,剔除该项即可
  29. ,chatLog: layui.cache.dir + 'css/modules/layim/html/chatlog.html' //聊天记录页面地址,若不开启,剔除该项即可
  30. });
  31. });

layim.config(options)的更多可选配置项见下表:

可选项 默认值 类型 用途
brief false boolean 是否简约模式,如果设为 true,则主面板不会显示。一般可用于客服
title 我的LayIM string 主面板最小化后显示的名称
min false boolean 用于设定主面板是否在页面打开时,始终最小化展现
right 0px string 用于设定主面板右偏移量。该参数可避免遮盖你页面右下角已经的bar
minRight string 用户控制聊天面板最小化时、及新消息提示层的相对right的px坐标。
如:minRight: '200px'
initSkin 空字符 string 设置初始背景,默认不开启。可设置./css/modules/layim/skin目录下的图片文件名
如:initSkin: '5.jpg'
isAudio false boolean 是否开启聊天工具栏音频
isVideo false boolean 是否开启开启聊天工具栏视频
notice false boolean 是否开启桌面消息提醒,即在浏览器之外的提醒
voice default.mp3 string/boolean 设定消息提醒的声音文件(所在目录:./layui/css/modules/layim/voice/)
若不开启,设置 false 即可
isfriend true boolean 是否开启好友
isgroup true boolean 是否开启群组
maxLength 3000 number 可允许的消息最大字符长度
skin null object 拓展背景,如:

codelayui.code

  1. skin: [
  2. 'http://xxx.com/skin.jpg',
  3. 'b.png'
  4. ]
copyright false boolean 是否授权。如果非授权获得,或将LayIM应用在第三方,建议保留,即不设置。
init数据格式

通过layim.config来设定init参数可获得:我的信息、好友列表、群组列表。你可以采用Ajax配置方式,以及直接赋值列表数据。

Ajax配置方式layui.code

  1. /获取主面板列表信息
  2. init: {
  3. url: '' //接口地址(返回的数据格式见下文)
  4. ,type: 'get' //默认get,一般可不填
  5. ,data: {} //额外参数
  6. }

那么该接口所返回的信息(response)应该严格按照下述的JSON格式:

codelayui.code

  1. {
  2. "code": 0 //0表示成功,其它表示失败
  3. ,"msg": "" //失败信息
  4. ,"data": {
  5. //我的信息
  6. "mine": {
  7. "username": "纸飞机" //我的昵称
  8. ,"id": "100000" //我的ID
  9. ,"status": "online" //在线状态 online:在线、hide:隐身
  10. ,"sign": "在深邃的编码世界,做一枚轻盈的纸飞机" //我的签名
  11. ,"avatar": "a.jpg" //我的头像
  12. }
  13. //好友列表
  14. ,"friend": [{
  15. "groupname": "前端码屌" //好友分组名
  16. ,"id": 1 //分组ID
  17. ,"list": [{ //分组下的好友列表
  18. "username": "贤心" //好友昵称
  19. ,"id": "100001" //好友ID
  20. ,"avatar": "a.jpg" //好友头像
  21. ,"sign": "这些都是测试数据,实际使用请严格按照该格式返回" //好友签名
  22. ,"status": "online" //若值为offline代表离线,online或者不填为在线
  23. }, …… ]
  24. }, …… ]
  25. //群组列表
  26. ,"group": [{
  27. "groupname": "前端群" //群组名
  28. ,"id": "101" //群组ID
  29. ,"avatar": "a.jpg" //群组头像
  30. }, …… ]
  31. }
  32. }

Demo:getList.json

直接赋值列表数据layui.code

  1. //里面的字段格式 同 上文的 data 中的格式。
  2. //注意:采用该方式时,不可以再配置url参数,否则会走Ajax模式
  3. init: {
  4. mine: {}
  5. ,friend: []
  6. ,group: []
  7. }
members数据格式

通过layim.config来设定members参数可获取群员列表,假设你进行了下述配置

codelayui.code

  1. ,members: {
  2. url: ' '/api/im/getMembers/'
  3. ,data: {}
  4. }

那么当点击群聊面板查看成员时,将会向members的url发送Ajax请求,并自动传递一个id参数(群组id)。该接口所返回的信息(response)应该严格按照下述的JSON格式:

codelayui.code

  1. {
  2. "code": 0 //0表示成功,其它表示失败
  3. ,"msg": "" //失败信息
  4. ,"data": {
  5. "list": [{
  6. "username": "马小云" //群员昵称
  7. ,"id": "168168" //群员id
  8. ,"avatar": "http://tp4.sinaimg.cn/2145291155/180/5601307179/1" //群员头像
  9. ,"sign": "让天下没有难写的代码" //群员签名
  10. }, …… ]
  11. }
  12. }

Demo:getMembers.json

上传图片

通过layim.config来设定uploadImage参数可进行图片上传,假设你进行了下述配置

codelayui.code

  1. ,uploadImage: {
  2. url: ''
  3. }

那么当点击聊天面板上传图片时,将会向uploadImage的url发送HTTP请求,进行图片上传。我们会给你传递一个name="file"的文件表单域,你接受即可。该接口所返回的信息(response)应该严格按照下述的JSON格式:

codelayui.code

  1. {
  2. "code": 0 //0表示成功,其它表示失败
  3. ,"msg": "" //失败信息
  4. ,"data": {
  5. "src": "http://cdn.xxx.com/upload/images/a.jpg" //图片url
  6. }
  7. }
上传文件

通过layim.config来设定uploadImage参数可进行文件上传,事实上跟图片上传非常类似有木有?假设你进行了下述配置

codelayui.code

  1. ,uploadFile: {
  2. url: ' ''
  3. }

那么当点击聊天面板上传文件时,将会向uploadFile的url发送HTTP请求,进行文件上传。我们会给你传递一个name="file"的文件表单域,你接受即可。该接口所返回的信息(response)应该严格按照下述的JSON格式:

codelayui.code

  1. {
  2. "code": 0 //0表示成功,其它表示失败
  3. ,"msg": "" //失败信息
  4. ,"data": {
  5. "src": "http://cdn.xxx.com/upload/file/LayIM.zip" //文件url
  6. ,"name": "LayIM.zip" //文件名
  7. }
  8. }
扩展工具栏

你可以对聊天面板的工具栏区域进行扩展,以便实现更丰富的聊天内容。首先在你layim.config中设定好要扩展的图标、名称等信息,如:

codelayui.code

  1. layim.config({
  2. //可同时配置多个
  3. tool: [{
  4. alias: 'code' //工具别名
  5. ,title: '代码' //工具名称
  6. ,icon: '&#xe64e;' //工具图标,参考图标文档
  7. }]
  8. })

那么在工具栏中将会出现一个代码的图标,如何在点击它时实现你想要的功能呢?很简单,你只需要:

codelayui.code

  1. //监听自定义工具栏点击,以添加代码为例
  2. layim.on('tool(code)', function(insert, send, obj){ //事件中的tool为固定字符,而code则为过滤器,对应的是工具别名(alias)
  3. layer.prompt({
  4. title: '插入代码'
  5. ,formType: 2
  6. ,shade: 0
  7. }, function(text, index){
  8. layer.close(index);
  9. insert('[pre class=layui-code]' + text + '[/pre]'); //将内容插入到编辑器,主要由insert完成
  10. //send(); //自动发送
  11. });
  12. console.log(this); //获取当前工具的DOM对象
  13. console.log(obj); //获得当前会话窗口的DOM对象、基础信息
  14. });
消息盒子

你可以配置msgbox指向一个盒子页面地址,从而为主面板赋予各种系统消息机制。

codelayui.code

  1. layim.config({
  2. msgbox: layui.cache.dir + 'css/modules/layim/html/msgbox.html' //消息盒子页面地址,若不开启,剔除该项即可
  3. });

它指向的是我们内置的一个盒子模版(你也可以换成你自己的页面),里面写好了所有代码,你只需要按照里面的注释配置好一些接口即可。
当你试图在盒子的图标上实时获取到最新的系统消息数时,你可以借助以下方法完成。

codelayui.code

  1. layim.msgbox(5); //数字即为你通过websocket或者Ajax实时获取到的最新消息数量
  2. //它将在主面板的消息盒子icon上不断显隐提示,直到点击后自动消失
查找页面

为了避免联调的复杂性且需求不一,所以官方暂不提供该模版结构与样式,实际使用时,可移至该文件到你的项目中,对页面自行把控

codelayui.code

  1. layim.config({
  2. find: layui.cache.dir + 'css/modules/layim/html/find.html' //发现页面地址,若不开启,剔除该项即可
  3. });
查看更多聊天记录

LayIM会在本地存储每个会话的最新 20 条记录。但一般服务端也要存储存储一份,为了避免联调的复杂性,我们并不内置更多聊天记录的展示。而是弹出一个聊天记录的layer窗口,这意味着你可以随意发挥聊天记录的页面。通过layim.config配置chatLog来指向聊天记录的URL。假设你进行了下述设定:

codelayui.code

  1. layim.config({
  2. //以下为我们内置的模版,也可以换成你的任意页面。若不开启,剔除该项即可
  3. chatLog: layui.cache.dir + 'css/modules/layim/html/chatlog.html'
  4. });

那么,我们会在chatLog所对应的URL后面动态追加当前聊天窗口的ID(即好友或群组ID)和类型,如:/chat/log?id=123&type=friend
详细情况可以打开 chatlog.html 去了解,里面有我们写好的代码。

富文本内容格式

LayIM的聊天多类型内容解析采用内部特定的文本格式,你可以借助它在聊天内容区域呈现多样化的内容。目前我们支持的内容如下:

codelayui.code

  1. 超链接格式:a(地址)[文本] 如:a(http://www.layui.com)[layui]
  2. 图片格式:img[地址] 如:img[http://cdn.layui.com/xxx/a.jpg]
  3. 文件格式:file(地址)[文本] 如:file(http://cdn.layui.com/download/layim.zip)[layim.zip]
  4. 音频格式:audio[地址] 如:audio[http://cdn.layui.com/xxx/a.mp3]
  5. 视频格式:video[地址] 如:video[http://cdn.layui.com/xxx/a.avi]
接入WebSocket

一般来说,对接到第三方通讯平台是个更靠谱的选择,比如:环信融云野狗。它们都可以是 LayIM 的最佳拍档,你会省去许多工作。

但如果你想保证绝对的数据隐私,你也可以自己搭建通讯服务。目前所有的主流Web语言都有对WebSocket做很好的支持,其中也有很多优秀的通讯框架可以任你挑选,因此万万不可畏惧它的存在,除非你真的想用Ajax轮询去解决消息I/O。WebSocket会使得你的消息接受和传递变得极其轻松,最重要的一点是,性能卓绝。WebSocket的建立非常简单:

codelayui.code

  1. layui.use('layim', function(layim){
  2. //建立WebSocket通讯
  3. //注意:如果你要兼容ie8+,建议你采用 socket.io 的版本。下面是以原生WS为例
  4. var socket = new WebSocket('ws://localhost:8090');
  5. //发送一个消息
  6. socket.send('Hi Server, I am LayIM!');
  7. codelayui.code

    1. //更多情况下,一般是传递一个JSON
    2. socket.send(JSON.stringify({
    3. type: '' //随便定义,用于在服务端区分消息类型
    4. ,data: {}
    5. }));
  8. //连接成功时触发
  9. socket.onopen = function(){
  10. socket.send('XXX连接成功');
  11. };
  12. //监听收到的消息
  13. socket.onmessage = function(res){
  14. //res为接受到的值,如 {"emit": "messageName", "data": {}}
  15. //emit即为发出的事件名,用于区分不同的消息
  16. };
  17. 另外还有onclose、onerror,分别是在链接关闭和出错时触发。
  18. //基本上常用的就上面几个了,是不是非一般的简单?
  19. });

服务端层面,不用害怕,事情也远没有那么复杂。这些文档也许可以帮助到你:LayIM 接入案例/教程大集锦,含Node.js/Java/.NET/PHP

事件监听

方法:layim.on(event, callback)
用于LayIM事件监听。接受两个参数。第一个参数event即事件名,第二个参数callback即事件回调。

ready事件

事件名:ready,用于监听LayIM初始化就绪。由于主面板的渲染,需建立在init接口请求完毕的基础上,而一些操作必须等到主面板渲染完毕后才能操作,所以这个时候就可以放入ready事件的回调体中来执行。其回调接受一个object类型的参数,携带一些基础配置信息、我的用户信息、好友/群列表信息、本地数据库信息等,调用方式:

codelayui.code

  1. layim.on('ready', function(options){
  2. console.log(options);
  3. //do something
  4. });
  5. //注意:以下情况不会触发 ready事件,即代码无需写在ready里面
  6. * 简约模式(即brief: true时)不会触发该事件
  7. * init直接赋值mine、friend的情况下(只有设置了url才会执行 ready 事件)
监听在线状态切换

事件名:online,看到主面板你的昵称后的icon么,没错,就是它。当前支持“在线”、“隐身”两种状态切换。分别以online和hide的string类型的值传递给回调参数。如:

codelayui.code

  1. layim.on('online', function(status){
  2. console.log(status); //获得online或者hide
  3. //此时,你就可以通过Ajax将这个状态值记录到数据库中了。
  4. //服务端接口需自写。
  5. });
监听修改签名

事件名:sign
当主面板的签名被改动后触发,并返回新的签名

codelayui.code

  1. layim.on('sign', function(value){
  2. console.log(value); //获得新的签名
  3. //此时,你就可以通过Ajax将新的签名同步到数据库中了。
  4. });
监听更换背景皮肤

事件名:setSkin
当点击更换背景皮肤时触发,返回特定目录下的图片文件名和src路径

codelayui.code

  1. layim.on('setSkin', function(filename, src){
  2. console.log(filename); //获得文件名,如:1.jpg
  3. console.log(src); //获得背景路径,如:http://res.layui.com/layui/src/css/modules/layim/skin/1.jpg
  4. });
监听发送的消息

事件名:sendMessage,每当你发送一个消息,都可以通过该事件监听到。回调参数接受一个object类型的值,携带发送的聊天信息。如:

codelayui.code

  1. layim.on('sendMessage', function(res){
  2. var mine = res.mine; //包含我发送的消息及我的信息
  3. codelayui.code

    1. //mine的结构如下:
    2. {
    3. avatar: "avatar.jpg" //我的头像
    4. ,content: "你好吗" //消息内容
    5. ,id: "100000" //我的id
    6. ,mine: true //是否我发送的消息
    7. ,username: "纸飞机" //我的昵称
    8. }
  4. var to = res.to; //对方的信息
  5. codelayui.code

    1. //to的结构如下:
    2. {
    3. avatar: "avatar.jpg"
    4. ,id: "100001"
    5. ,name: "贤心"
    6. ,sign: "这些都是测试数据,实际使用请严格按照该格式返回"
    7. ,type: "friend" //聊天类型,一般分friend和group两种,group即群聊
    8. ,username: "贤心"
    9. }
  6. //监听到上述消息后,就可以轻松地发送socket了,如:
  7. socket.send(JSON.stringify({
  8. type: 'chatMessage' //随便定义,用于在服务端区分消息类型
  9. ,data: res
  10. }));
  11. });
监听接受的消息

事件的监听并非layim提供,而是WebSocket提供。
检测到WebSocket事件后,执行layim的内置方法:layim.getMessage(options)
即可显示消息到聊天面板(如果消息所指定的聊天面板没有打开,则会进入本地的消息队列中,直到指定的聊天面板被打开,方可显示。),这是一个对你有用的例子:

codelayui.code

  1. //监听收到的聊天消息,假设你服务端emit的事件名为:chatMessage
  2. socket.onmessage = function(res){
  3. res = JSON.parse(res);
  4. if(res.emit === 'chatMessage'){
  5. layim.getMessage(res.data); //res.data即你发送消息传递的数据(阅读:监听发送的消息
  6. }
  7. };
  8. //如果是来自于用户的聊天消息,它必须接受以下字段
  9. codelayui.code

    1. layim.getMessage({
    2. username: "纸飞机" //消息来源用户名
    3. ,avatar: "http://tp1.sinaimg.cn/1571889140/180/40030060651/1" //消息来源用户头像
    4. ,id: "100000" //消息的来源ID(如果是私聊,则是用户id,如果是群聊,则是群组id)
    5. ,type: "friend" //聊天窗口来源类型,从发送消息传递的to里面获取
    6. ,content: "嗨,你好!本消息系离线消息。" //消息内容
    7. ,cid: 0 //消息id,可不传。除非你要对消息进行一些操作(如撤回)
    8. ,mine: false //是否我发送的消息,如果为true,则会显示在右方
    9. ,fromid: "100000" //消息的发送者id(比如群组中的某个消息发送者),可用于自动解决浏览器多窗口时的一些问题
    10. ,timestamp: 1467475443306 //服务端时间戳毫秒数。注意:如果你返回的是标准的 unix 时间戳,记得要 *1000
    11. });
  10. //如果是来自于系统的聊天面板的消息
  11. codelayui.code

    1. layim.getMessage({
    2. system: true //系统消息
    3. ,id: 1111111 //聊天窗口ID
    4. ,type: "friend" //聊天窗口类型
    5. ,content: '对方已掉线'
    6. });
监听查看群员

事件名:members,在群聊面板中查看全部成员时触发,该事件返回获取群员接口(即layim.config中的members)的response信息。

codelayui.code

  1. layim.on('members', function(data){
  2. console.log(data);
  3. });
监听聊天窗口的切换

事件名:chatChange,坦白而言,似乎没什么卵用。不过有总比没有好。该事件返回一个object类型的参数,携带当前聊天面板的容器、基础信息等。

codelayui.code

  1. layim.on('chatChange', function(obj){
  2. console.log(obj);
  3. });
自定义一个聊天窗口

方法名:layim.chat(options),是否似曾相识,没错,我们见过文档最开始的“客服姐姐”用的就是该方法。它允许你自定义任意模式的聊天窗口,先看例子吧:

codelayui.code

  1. //自定义聊天窗口
  2. codelayui.code

    1. layim.chat({
    2. name: '张三' //名称
    3. ,type: 'friend' //聊天类型
    4. ,avatar: 'http://tp1.sinaimg.cn/5619439268/180/40030060651/1' //头像
    5. ,id: 11111 //好友id
    6. })
    7. //自定义客服窗口
    8. layim.config({
    9. brief: true //简约模式,不显示主面板
    10. }).chat({
    11. name: '在线客服二' //名称
    12. ,type: 'friend' //聊天类型
    13. ,avatar: 'http://tp1.sinaimg.cn/5619439268/180/40030060651/1' //头像
    14. ,id: -2 //定义唯一的id方便你处理信息
    15. });
    16. layim.setChatMin(); //收缩聊天面板
  3. //自定义群聊(对于想搞一个临时性的房间,貌似是挺有意思的)
  4. codelayui.code

    1. layim.chat({
    2. name: 'LayIM畅聊'
    3. ,type: 'group' //群组类型
    4. ,avatar: 'http://tp2.sinaimg.cn/5488749285/50/5719808192/1'
    5. ,id: 10000000 //定义唯一的id方便你处理信息
    6. ,members: 123 //成员数,不好获取的话,可以设置为0
    7. });

该方法结合brief: true(简约模式),可以免去较为复杂的数据配置。轻量地建立一个聊天面板。拥有较大的平台实用性。可以预见的是,它应该会成为LayIM一个露脸率最高的存在。想象一下吧,对你而言是否如此?

初始最小化聊天界面

方法名:layim.setChatMin(),如果你在初始的状态下不想展开聊天面板(譬如悬浮的在线客服),那么该方法会派上用场,使用很简单,就不过多啰嗦了。

codelayui.code

  1. layim.setChatMin();
更新当前会话状态

方法名:layim.setChatStatus(str),可用于显示:对方输入状态、在线离线状态等,如:

codelayui.code

  1. //每次窗口打开或切换,即更新对方的状态
  2. layim.on('chatChange', function(res){
  3. var type = res.data.type;
  4. if(type === 'friend'){
  5. layim.setChatStatus('<span style="color:#FF5722;">在线</span>'); //模拟标注好友在线状态
  6. } else if(type === 'group'){
  7. //模拟系统消息
  8. layim.getMessage({
  9. system: true //系统消息
  10. ,id: 111111111
  11. ,type: "group"
  12. ,content: '贤心加入群聊'
  13. });
  14. }
  15. });
弹出添加面板

方法名:layim.add(data)
执行该方法将弹出一个我们内置的添加面板,可以帮助你完成:申请添加好友、申请添加群。参数格式如下:

codelayui.code

  1. layim.add({
  2. type: 'friend' //friend:申请加好友、group:申请加群
  3. ,username: 'xxx' //好友昵称,若申请加群,参数为:groupname
  4. ,avatar: 'a.jpg' //头像
  5. ,submit: function(group, remark, index){ //一般在此执行Ajax和WS,以通知对方
  6. console.log(group); //获取选择的好友分组ID,若为添加群,则不返回值
  7. console.log(remark); //获取附加信息
  8. layer.close(index); //关闭改面板
  9. }
  10. });
好友分组面板

方法名:layim.setFriendGroup(data)
执行该方法将弹出一个好友分组面板,以完成将好友追加到主面板的操作:

codelayui.code

  1. layim.setFriendGroup({
  2. type: 'friend'
  3. ,username: 'xxx' //好友昵称,若申请加群,参数为:groupname
  4. ,avatar: 'a.jpg' //头像
  5. ,group: layim.cache().friend //获取好友列表数据
  6. ,submit: function(group, index){
  7. //一般在此执行Ajax和WS,以通知对方已经同意申请
  8. //……
  9. //同意后,将好友追加到主面板
  10. layim.addList(data); //见下文
  11. }
  12. });
添加好友/群到主面板

方法名:layim.addList(options),当你的WebSocket监听到有好友或者群新增时,需让LayIM的主面板同步添加的信息,可用该方法。先看看例子:

codelayui.code

  1. layim.on('ready', function(res){
  2. //监听添加列表的socket事件,假设你服务端emit的事件名为:addList
  3. socket.onmessage = function(res){
  4. if(res.emit === 'addList'){
  5. layim.addList(res.data); //如果是在iframe页,如LayIM设定的add面板,则为 parent.layui.layim.addList(data);
  6. }
  7. };
  8. //需要特别注意的是回调返回的res
  9. //如果添加的是好友,res的结构必须是这样的
  10. codelayui.code

    1. {
    2. type: 'friend' //列表类型,只支持friend和group两种
    3. ,avatar: "a.jpg" //好友头像
    4. ,username: '冲田杏梨' //好友昵称
    5. ,groupid: 2 //所在的分组id
    6. ,id: "1233333312121212" //好友id
    7. ,sign: "本人冲田杏梨将结束AV女优的工作" //好友签名
    8. }
  11. //如果添加的是群组,res的结构必须是这样的
  12. codelayui.code

    1. {
    2. type: 'group' //列表类型,只支持friend和group两种
    3. ,avatar: "a.jpg" //群组头像
    4. ,groupname: 'Angular开发' //群组名称
    5. ,id: "12333333" //群组id
    6. }
  13. });
从主面板移除好友/群

方法名:layim.removeList(options)
当你的WebSocket监听到有好友或者群删除时,需让LayIM的主面板同步删除的信息,可用该方法。它的调用非常简单,只需要传两个key:

codelayui.code

  1. layim.removeList({
  2. type: 'friend' //或者group
  3. ,id: 1238668 //好友或者群组ID
  4. });
  5. //如果是在iframe页,如LayIM设定的add面板,则为:
  6. parent.layui.layim.removeList({
  7. type: 'friend' //或者group
  8. ,id: 1238668 //好友或者群组ID
  9. });
实时更新好友列表离线状态

方法名:layim.setFriendStatus(id, type)

codelayui.code

  1. layim.setFriendStatus(11111, 'online'); //设置指定好友在线,即头像取消置灰
  2. layim.setFriendStatus(11111, 'offline'); //设置指定好友在线,即头像置灰
获取cache数据

方法名:layim.cache(),获取LayIM的cache信息,返回的信息结构和ready事件获得的信息一样,不同的是,改方法始终会获取到最新的cache。

codelayui.code

  1. //输出的信息不妨在你的Chrome控制台看看(需在引有LayIM的页面中),在此就不做列举了
  2. console.log(layim.cache())
删除本地数据

codelayui.code

  1. var cache = layui.layim.cache();
  2. var local = layui.data('layim')[cache.mine.id]; //获取当前用户本地数据
  3. //这里以删除本地聊天记录为例
  4. delete local.chatlog;
  5. //向localStorage同步数据
  6. layui.data('layim', {
  7. key: cache.mine.id
  8. ,value: local
  9. });
关于版权

LayIM目前并非开源产品,因此如果你是通过官网捐赠渠道获得LayIM,你将成为LayIM的终身会员,并可以将LayIM应用在任意正规平台。如果你通过非捐赠渠道获得LayIM,我们并不会进行过多追究,但是请勿对 LayIM 本身二次出售。版权最终解释权为:layui.com 所有

Layui - 用心与你沟通