使用 jquery jroll2 开发仿qq聊天列表侧滑功能
由于开发需求,需要做一个类似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聊天列表侧滑功能的更多相关文章
- 仿QQ聊天程序(java)
仿QQ聊天程序 转载:牟尼的专栏 http://blog.csdn.net/u012027907 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本 ...
- Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介
1.前言 本次实现的这个聊天工具是我去年c#程序设计课程所写的Socket仿QQ聊天,由于当时候没有自己的服务器,只能在机房局域网内进行测试,最近在腾讯云上买了一台云主机(本人学生党,腾讯云有个学生专 ...
- JS简单仿QQ聊天工具的制作
刚接触JS,对其充满了好奇,利用刚学到的一点知识,写了一个简单的仿QQ聊天的东西,其中还有很多的不足之处,有待慢慢提高. 功能:1.在输入框中输入内容,点击发送,即可在上方显示所输入内容. 2.点击‘ ...
- jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动
jquery图片滚动仿QQ商城带左右按钮控制焦点图片切换滚动 http://www.17sucai.com/pins/demoshow/382
- 高仿qq聊天界面
高仿qq聊天界面,给有需要的人,界面效果如下: 真心觉得做界面非常痛苦,给有需要的朋友. chat.xml <?xml version="1.0" encoding=&quo ...
- WPF 自定义TreeView控件样式,仿QQ联系人列表
一.前言 TreeView控件在项目中使用比较频繁,普通的TreeView并不能满足我们的需求.因此我们需要滴对TreeView进行改造.下面的内容将介绍仿QQ联系人TreeView样式及TreeVi ...
- Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命
Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/li ...
- WPF仿QQ聊天框表情文字混排实现
原文:WPF仿QQ聊天框表情文字混排实现 二话不说.先上图 图中分别有文件.文本+表情.纯文本的展示,对于同一个list不同的展示形式,很明显,应该用多个DataTemplate,那么也就需要Data ...
- 动手分析安卓仿QQ联系人列表TreeView控件
因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码. 一. 需要用 ...
随机推荐
- lrzsz 移植到 ARM-linux 嵌入式板子上
特别说明:SSH 或 串口 都可以使用 lrzsz 进行通信 lrzsz是一个Unix通信包,提供XMODEM.YMODEM和ZMODEM文件传输协议.lrzsz以前是Omen科技的主打软件,现在已经 ...
- 离线安装MySQL5.7
无网络环境下安装MySQL5.7 前提: 1.系统环境:CentOS 7 64bit 2.需要的rpm包已经在本地 安装: 1.下载需要的rpm包: mysql-community-client-5. ...
- PHP-PSR-[0-4]代码规范
PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR-[0-4] ...
- 重启sqlserver服务 命令
在控制台(CMD)中运行: net stop mssqlserver net start mssqlserver
- [转载]WIN7已经记住访问另一台电脑的账号和密码 凭证
http://jingyan.baidu.com/article/a3aad71aaa32eeb1fb0096c8.html
- ffmpeg查看音频文件信息
查看音频文件的信息(基于本地路径) import subprocess import json path = r'D:\learn\download\NosVJ60QCIs0b8PVHMPomZJsr ...
- 02 uni-app框架学习:设置全局样式统一每个页面的背景颜色
1.设置全局样式可以在App.vue里面 2.在每个页面的根view 里添加一个class名叫page
- Hibernate5总结
1. 明确Hibernate是一个实现了ORM思想的框架,它封装了JDBC,是程序员可以用对象编程思想来操作数据库. 2. 明确ORM(对象关系映射)是一种思想,JPA(Java Persistenc ...
- springboot整合Thymeleaf模板引擎
引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</ ...
- springcloud使用Zuul构建微服务网关入门
为什么要使用微服务网关 不同的微服务一般会经过不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求. 如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微 ...