前言

  上一篇中讲解了加好友的流程,本篇将介绍好友管理,群组管理的右键菜单功能。当然由于菜单项目太多,都实现也得花费时间。只讲解一下我是如何从不知道怎么实现右键菜单到会自定义菜单的一个过程。另外呢,针对菜单:发送即时消息这个原本在Laim中已经有的功能做出实现,其他的方法,只要按照业务逻辑一一实现即可。

演示

  用户信息右键菜单:

  

  好友分组信息右键菜单:

  

  群组信息右键菜单:

  

思路讲解

  首先呢,Layim中针对历史消息这个栏有两个菜单项,清空和删除某一条,这是源代码中已经有的,当我看到这段代码的时候,那么实现其他的右键菜单就有戏了。

  

   首先可以看到,增加右键菜单的方式就是给元素添加contextmenu事件,然后弹出右键菜单层就是强大的layer的工作了。由于我前端也不是很6,所以,代码照抄。加上自己的菜单,如果想加前边的图标,那么增加相应的html即可。下面我们把好友的右键菜单加上。

 //好友右键菜单
layimMain.find('.layim-list-friend').on('contextmenu', '.layui-layim-list li', function (e) {
var othis = $(this);
var id = othis[0].id;
var html = '<ul id="contextmenu_' + othis[0].id + '" data-id="' + othis[0].id + '" data-index="' + othis.data('index') + '">';
html += '<li layim-event="menu_chat"><i class="layui-icon" ></i>' + space_icon + '发送即时消息</li>';
html += '<li layim-event="menu_profile"><i class="layui-icon"></i>' + space_icon + '查看资料</li>';
html += '<li layim-event="menu_history"><i class="layui-icon" ></i>' + space_icon + '消息记录</li>';
html += '<li layim-event="menu_nomsg">' + space_no_icon + '屏蔽消息</li>';
html += '<li layim-event="menu_delete">' + space_no_icon + '删除好友</li>';
html += '<li layim-event="menu_moveto">' + space_no_icon + '移动至</li></ul>';
if (othis.hasClass('layim-null')) return;
//注意一下这个方法
showtips(html, this, id, 0, 0);
//showtips(html, this, id, 160, 25); });

  大家可以看到,事件是加在  layim-list-friend 下边的 layui-layim-ist 上的,有的同学会问,你怎么知道加在这里。我也不知道,右键查看元素,看一下代码就知道了。其实前端不管代码如何写的天花乱坠,最后总会生成html的。我们想加什么功能,一定要了解相应的html的结构。比如,给每个菜单添加事件怎么办呢。很简单,layim代码开头已经写明了注册事件的方法:

  $('body').on('click', '*[layim-event]', function(e){
var othis = $(this), methid = othis.attr('layim-event');
events[methid] ? events[methid].call(this, othis, e) : '';
});

  没错,就是上边这三行万能的代码,其实我并不知道其中的原理,尤其是第三行call方法。但是我知道,这么写一定能调用相应的方法。于是在events后在增加各种右键菜单的方法:

  在看效果之前呢,我们先回到前前一段代码(注意一下这个方法部分)。就是showtips方法。当我们在后两个参数传0 0 的时候,效果是这样的:

  看起来有点不舒服,所以我就想把这个弹层往右下方移动一点,可是layer.tips我也不能去动他,于是我的思路就是,当这个弹层初始化完毕之后,强行更改他的位置。于是我在layer.tips 的方法回调中增加resetposition方法(t=top,l=left)

  那么到这里你应该知道这个resetposition做了什么事了吧。就是一个简单的修改top和left值

  

  修改完成之后,就会看到我们演示中的样子了。不过,这里有个bug没改,就是当我们的好友在好友列表的最下方,已经接近电脑屏幕底端了。如果在往下移动的话,菜单会看不见,所以,小伙伴们做的时候要注意当前菜单的位置和高度,来动态进行top调整。

实战效果

  做完上边的工作之后,我们运行程序,点击右键试试。

  

  可以看到事件已经成功触发了,所以对应菜单我们只要实现相应的效果即可。下面我们做一下发送即时消息对接功能。源代码中已经有 chat方法,方法参数有个 othis。我们只要关心这个othis是什么,然后在 menu_chat方法中调用chat就可以了。查看一下源代码,很惊喜的发现原来这个othis在我们右键菜单打开之前,我们就获取到了,就是这个东西:

 layimMain.find('.layim-list-friend').on('contextmenu', '.layui-layim-list li', function (e) {
var othis = $(this);

  我的做法的就是加layim中的全局变量,将这个othis先保存起来,然后在menu_chat中调用。

 , menu_chat: function () {
//打开聊天窗口
events.chat(global.othis);
//关闭右键菜单
layer.closeAll('tips');
},

  搞定othis参数之后,我们在重新点击右键,发送即时消息,成功打开聊天窗口。

  OK,小伙伴们,剩下的菜单功能就交给你们啦。

总结

  其实好多小伙伴们觉得自己想加一个功能又没有思路,其实我们多读一读源代码,照着葫芦画瓢也会发现意想不到的惊喜。通过阅读layim源代码我学了很多平时压根想不到的东西。js这玩意还是挺神奇的,当然对于一个后端工程师来说。今天的右键菜单就讲到这里了。

      下篇预告【中级】ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(七) 之 历史记录查询(时间,关键字,图片,文件),关键字高亮显示。

   想要学习的小伙伴,可以关注我的博客哦,我的QQ:645857874,Email:fanpan26@126.com

  GitHub:https://github.com/fanpan26/LayIM_NetClient/

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(六) 之 Layim源码改造右键菜单--好友、组管理功能的实现。的更多相关文章

  1. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列

    ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  http://www.cnblogs.com/panzi/p/5742089.html ASP.NET S ...

  2. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十二) 代码重构使用反射工厂解耦(一)缓存切换

    前言 上一篇中,我们用了反射工厂来解除BLL和UI层耦合的问题.当然那是最简单的解决方法,再复杂一点的程序可能思路相同,但是在编程细节中需要考虑的就更多了,比如今天我在重构过程中遇到的问题.也是接下来 ...

  3. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言

    前端时间听一个技术朋友说 LayIM 2.0 发布了,听到这个消息抓紧去官网看了一下.(http://layim.layui.com/)哎呀呀,还要购买授权[大家支持一下哦],果断买了企业版,喜欢钻研 ...

  4. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

    大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM ...

  5. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(二) 之 ChatServer搭建,连接服务器,以及注意事项。

    上篇:ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取) 上一篇我们已经完成了初步界面的搭建工作,本篇将介绍IM的核心内容 ...

  6. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。

    上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户 ...

  7. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(四) 之 用户搜索(Elasticsearch),加好友流程(1)。

    前面几篇基本已经实现了大部分即时通讯功能:聊天,群聊,发送文件,图片,消息.不过这些业务都是比较粗犷的.下面我们就把业务细化,之前用的是死数据,那我们就从加好友开始吧.加好友,首先你得知道你要加谁.L ...

  8. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(五) 之 加好友,加群流程,消息管理和即时消息提示的实现

    前言 前前一篇留了个小问题,在上一篇中忘了写了,就是关于LayIM已经封装好的上传文件或者图片的问题.对接好接口之后,如果上传速度慢,界面就会出现假死情况,虽然文件正在上传.于是我就简单做了个图标替代 ...

  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(七) 之 历史记录查询(时间,关键字,图片,文件),关键字高亮显示。

    前言 上一篇讲解了如何自定义右键菜单,都是前端的内容,本篇内容就一个:查询.聊天历史纪录查询,在之前介绍查找好友的那篇博客里已经提到过 Elasticsearch,今天它又要上场了.对于Elastic ...

随机推荐

  1. brew gradle

    cat /usr/local/Library/Taps/homebrew/homebrew-versions/gradle221.rb GRADLE_HOME=/Users/temp/gradle22 ...

  2. springmvc之默认错误页面跳转

    在做一个项目的时候,为了界面美观及用户体验,我们往往会设计自己的错误跳转页面,而不是直接展示给用户一堆错误码,为此我们需要配置自己的错误跳转页面. 1.项目结构 2.web.xml <!DOCT ...

  3. 【转】AspNetPager分页控件用法

    AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的详细代码: 1.首先到www.w ...

  4. Sqli-LABS通关笔录-17-审计SQL注入

    这个关卡开始好像进入新的知识区了,前面几个是让我们加深对盲注的印象.接下来又是新知识了!皮卡丘,接招吧! 代码是从SQL-libs的第十七关卡扣的. 页面效果如下所示: PHP面完整CODE如下所示: ...

  5. ubuntu 安装mysql

    1.检查是否已经安装mysql netstat -tap | grep mysql 2.安装mysql 2.1 先更新下软件列表 :sudo apt-get update 2.2 安装mysql :s ...

  6. Apache 无法启动

    本人是做前端开发的,对后台程序不太熟悉,也就以前学过一点.net.但现在都忘记的差不多了.最近在公司,经理给了我一个管理工具dedecms,我刚开始看的时候完全不懂这是什么东西,之前都没听说过(本人见 ...

  7. HDU 2860 并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=2860 n个旅,k个兵,m条指令 AP 让战斗力为x的加入y旅 MG x旅y旅合并为x旅 GT 报告x旅的战斗力 ...

  8. Springmvc常用注解

    1. @RequestMapping注解的作用位置 @RequestMapping可以作用在类名上,也可以作用在方法上. 如果都有, 产生作用的路径是类名上的路径+方法上的路径. 比如Employee ...

  9. 话说好像是这样,ios下面通常用iframe来打开你的scheme地址; Android下通常用location.href来。。。 不过实际情况好像比这个复杂得多。。

    http://js.40017.cn/touch/hb/p/openApp.js/** * Created by wsy10943 on 2015/5/18. */ window._web_publi ...

  10. jq隐藏页面的一行

    <script type="text/javascript" src="http://files.cnblogs.com/914556495wxkj/jquery- ...