由于开发需求,需要做一个类似qq的聊天界面,侧滑弹出单条item右侧菜单,菜单可点击,效果如下图(包括点击事件+长按事件):

1.项目主体dom和css

页面结构比较简单,顶部header做了fixed定位。

页面主体被id="wrapper"包含,每条item有用户的头像、名字和操作btn组成。

   <header>
聊天
</header>
<div id="wrapper">
<ul id="scroller">
<li class="item">
<div class="item-scroller">
<img src="data:image/01.jpg" alt="">
<div class="txt">张三</div>
<div class="del">
<div class="zhiding">置顶</div>
<div class="shanchu">删除</div>
</div>
</div>
</li>
<li class="item">
<div class="item-scroller">
<img src="data:image/01.jpg" alt="">
<div class="txt">赵四</div>
<div class="del">
<div class="zhiding">置顶</div>
<div class="shanchu">删除</div>
</div>
</div>
</li>
</ul>
</div>

css部分

 /*
http://www.cnblogs.com/ele-cat Reset Stylesheet
v1.0.1
2018-05-08
Author: Ele-cat - http://ele-cat.github.io
*/
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td,figure,figcaption{padding:;margin:;}
table {border-collapse: collapse;border-spacing:;}
fieldset,img {border:;max-width: 100%;}
address,caption,cite,code,dfn,em,strong,th,var {font-weight: normal;font-style: normal;}
ol,ul {list-style: none;}
caption,th {text-align: left;}
h1,h2,h3,h4,h5,h6 {font-weight: normal;font-size: 100%;}
q:before,q:after {content:'';}
abbr,acronym {border:;font-variant:normal;}
a{text-decoration: none;transition:all .4s ease-in-out;}
sup,sub{vertical-align:baseline;}
legend{color:#000;}
input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}
input,button,textarea,select{*font-size:100%;outline:none;resize:none;}
:-moz-placeholder {color: #ccc;}
::-moz-placeholder {color: #ccc;}
input:-ms-input-placeholder,textarea:-ms-input-placeholder {color: #ccc;}
input::-webkit-input-placeholder,textarea::-webkit-input-placeholder {color: #ccc;}
.fl{float: left;}
.fr{float: right;}
/*兼容IE6/7*/
.cl {*zoom:;}
.cl:before,.cl:after{display: table;line-height:;content: "";}
.cl:after {clear: both;} header {
width: 100%;
height: 45px;
line-height: 45px;
background: #ececea;
border-bottom: 1px solid #ddd;
position: fixed;
left:;
top:;
z-index:;
text-align: center;
color: #4e4a49;
font-size: 1em;
} #wrapper {
width: 100%;
padding-top: 45px;
} .item {
width: 100%;
height: 2.8rem;
background: #FFFFFF;
border-bottom: 1px solid #eee;
} .item-scroller {
width: 140%;
position: absolute;
} .item-scroller img {
width: 2rem;
height: 2rem;
position: absolute;
top: 0.4rem;
left: 0.4rem;
border-radius: 0.4rem;
overflow: hidden;
} .item-scroller .txt {
margin-left: 2.8rem;
line-height: 2.8rem;
width: 80%;
} .del {
width: 27%;
height: 2.8rem;
position: absolute;
right:;
top:;
color: #fff;
text-align: center;
line-height: 2.8rem;
z-index:;
} .del .shanchu {
width: 50%;
height: 2.8rem;
text-align: center;
background: #FFB300;
float: left;
} .del .zhiding {
width: 50%;
height: 2.8rem;
text-align: center;
background: #E51C23;
float: left;
}

这个时候,页面已经成型。开始加入js代码。

2.js部分

(1)首先,引入jqueryCDN:

<script src="https://cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script>

(2)引入jroll.js文件,下载地址

使用mooc数据,先删除当前页面里的部分html代码,即删除<ul id="scroller"></ul>里的全部代码

全部js代码:

 $(function () {
var userList = [
{
name: '张三',
avatar: '01.jpg'
},
{
name: '李四',
avatar: '02.jpg'
},
{
name: '王五',
avatar: '03.jpg'
},
{
name: '赵四',
avatar: '01.jpg'
},
{
name: '张三',
avatar: '01.jpg'
},
{
name: '李四',
avatar: '02.jpg'
},
{
name: '王五',
avatar: '03.jpg'
},
{
name: '赵四',
avatar: '01.jpg'
}
]
var html = ''
for (let i = 0; i < userList.length; i++) {
const userInfo = userList[i];
html += '<li class="item" onclick="intoChat(\'' + userInfo.name + '\')" ontouchend="touchend()" ontouchmove="touchend()" ontouchstart="touchstart(\'' + userInfo.name + '\')">'
html += ' <div class="item-scroller">'
html += ' <img src="data:image/' + userInfo.avatar + '" alt="">'
html += ' <div class="txt">' + userInfo.name + '</div>'
html += ' <div class="del">'
html += ' <div class="zhiding" onclick="upChat(\'' + userInfo.name + '\')">置顶</div>'
html += ' <div class="shanchu" onclick="delChat(\'' + userInfo.name + '\')">删除</div>'
html += ' </div>'
html += ' </div>'
html += '</li>'
}
$('#scroller').append(html)
jroll(); // 调用jroll
}) function jroll() {
// 创建外层jroll实例
var jroll = new JRoll("#wrapper", {
scrollBarY: false
});
var items = document.querySelectorAll(".item");
var current = null;
//保存当前滑开的item
for (var i = 0; i < items.length; i++) {
// 每行创建jroll实例
var j = new JRoll(items[i], {
scrollX: true,
bounce: false
});
j.on("scrollStart", function () {
if (current && current !== this) {
current.scrollTo(0, 0, 100);
current = null;
}
});
j.on("scroll", function (e) {
if (this.x === 0 && !current) {
this.call(jroll, e);
} else {
current = this;
}
});
j.on("scrollEnd", function () {
if (this.x > -50) {
this.scrollTo(0, 0, 100);
current = null;
} else {
this.scrollTo(this.maxScrollX, 0, 100);
}
})
};
} // 点击操作
function intoChat(name) {
alert('点击"' + name + '"进行聊天')
} // 删除操作
function delChat(name) {
alert('点击"' + name + '"删除聊天')
} // 置顶操作
function upChat(name) {
alert('点击"' + name + '"置顶聊天')
} // 长按操作
function getTimeNow() {
var now = new Date();
return now.getTime();
}
function touchend() {
clearInterval(time); //如果按下时间不到1000毫秒便弹起,
}
function touchstart(name) {
timeStart = getTimeNow(); //获取鼠标按下时的时间
time = setInterval(function () {
timeEnd = getTimeNow(); //也就是每100毫秒获取一次时间
if (timeEnd - timeStart > 700) //如果此时检测到的时间与第一次获取的时间差有1000毫秒
{
alert('长按"' + name + '"进行操作')
clearInterval(time); //便不再继续重复此函数 (clearInterval取消周期性执行)
}
}, 100);
}

补充一、头像资源:

分别是01.jpg 02.jpg 03.jpg。

补充二、当我们点击右侧划出菜单时,需要阻止冒泡事件,代码如下:

     // 删除操作
function delChat(name, e) {
//如果提供了事件对象,则这是一个非IE浏览器
if (e && e.preventDefault) {
//阻止默认浏览器动作(W3C)
e.preventDefault();
}
else {
//IE中阻止函数器默认动作的方式
window.event.returnValue = false;
return false;
}
alert('点击"' + name + '"删除聊天')
} // 置顶操作
function upChat(name, e) {
//如果提供了事件对象,则这是一个非IE浏览器
if (e && e.preventDefault) {
//阻止默认浏览器动作(W3C)
e.preventDefault();
}
else {
//IE中阻止函数器默认动作的方式
window.event.returnValue = false;
return false;
}
alert('点击"' + name + '"置顶聊天')
}

补充三、重要部分都做了代码注释,有问题的话,可以在留言区评论。

补充四、下图使用 jquery 开发用户通讯录,可访问博客

使用 jquery jroll2 开发仿qq聊天列表侧滑功能的更多相关文章

  1. 仿QQ聊天程序(java)

    仿QQ聊天程序 转载:牟尼的专栏 http://blog.csdn.net/u012027907 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本 ...

  2. Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介

    1.前言 本次实现的这个聊天工具是我去年c#程序设计课程所写的Socket仿QQ聊天,由于当时候没有自己的服务器,只能在机房局域网内进行测试,最近在腾讯云上买了一台云主机(本人学生党,腾讯云有个学生专 ...

  3. JS简单仿QQ聊天工具的制作

    刚接触JS,对其充满了好奇,利用刚学到的一点知识,写了一个简单的仿QQ聊天的东西,其中还有很多的不足之处,有待慢慢提高. 功能:1.在输入框中输入内容,点击发送,即可在上方显示所输入内容. 2.点击‘ ...

  4. jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动

    jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382

  5. 高仿qq聊天界面

    高仿qq聊天界面,给有需要的人,界面效果如下: 真心觉得做界面非常痛苦,给有需要的朋友. chat.xml <?xml version="1.0" encoding=&quo ...

  6. WPF 自定义TreeView控件样式,仿QQ联系人列表

    一.前言 TreeView控件在项目中使用比较频繁,普通的TreeView并不能满足我们的需求.因此我们需要滴对TreeView进行改造.下面的内容将介绍仿QQ联系人TreeView样式及TreeVi ...

  7. Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

    Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/li ...

  8. WPF仿QQ聊天框表情文字混排实现

    原文:WPF仿QQ聊天框表情文字混排实现 二话不说.先上图 图中分别有文件.文本+表情.纯文本的展示,对于同一个list不同的展示形式,很明显,应该用多个DataTemplate,那么也就需要Data ...

  9. 动手分析安卓仿QQ联系人列表TreeView控件

    因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码.   一. 需要用 ...

随机推荐

  1. HDU 6158 笛卡尔定理+韦达定理

    The Designer Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  2. jsoncpp的安装与使用示例

    安装: 生成静态库 生成静态库: 第一步:生成目标文件: g++ -g -Wall -c json_reader.cpp json_value.cpp json_writer.cpp -I. -I.. ...

  3. 函数和常用模块【day06】:time模块 (一)

    本节内容 1.简述 2.time模块 3.时间格式转换 一.简述 我们在写代码的过程经常遇到时间模块,如果我们以后需要根据时间去筛选信息的话,那用户会更大,所以今天就来讲讲时间的两大模块:time & ...

  4. 洛谷P3389 【模板】高斯消元法(+判断是否唯一解)

    https://www.luogu.org/problemnew/show/P3389 这里主要说说怎么判断不存在唯一解 我们把每一行的第一个非零元称为关键元 枚举到一个变量,如果剩下的行中该变量的系 ...

  5. ftp服务部署

    注:Centos7环境,添加用户指定目录后默认其为此用户的共享目录. chroot_local_user=YES chroot_list_enable=YES # (default follows) ...

  6. Spring Cloud(十二)声名式服务调用:Feign 的使用(下)

    前言 本文是对上一篇博文的扩充,很多平时用不到的特性就开始简略一写,Spring Cloud各版本之间的差距很大的,用不到的可能下一个版本就被kill掉了.由于笔者写本文开始的时候误解了Feign的继 ...

  7. iOS8 自定义navigationbar 以及 UIBarButtonItem 边距问题

    一.自定义navigationbar - (void)initNavigationBar{ [self.navigationController setNavigationBarHidden:YES] ...

  8. v140平台工具集与v110工具集选择

    今天在编译用vs2012编译C++动态库提示:error MSB8020: The builds tools for v140_xp (Platform Toolset = 'v140_xp') ca ...

  9. 用U盘安装 win7 ”找不到任何设备驱动程序“ 和 系统出现 windows boot manager 解决方案

    用U盘安装win7系统时,系统交替的出现了如下的2个错误,捣鼓了半天,记录下来: 问题1描述: 安装win7时  ”找不到任何设备驱动程序“  问题2描述: 安装win7时,用U盘启动后, 系统出现 ...

  10. redhat7配置本地yum源

    1.首先是要有一个iso文件,并将这个文件挂载到某个目录 挂载: 配置: 检验: yum list 现在你就可以在没有网的情况下,安装软件了~~~