仿qq会话列表滑动效果

一、功能分析

qq会话列表可以向左滑动,然后出现删除按钮

二、知识点

touch事件,css3的transform属性

三、实现思路

为每个列表项绑定touch事件,计算touch移动的距离,在touchmove事件中实现滑动,在touchend中判断touch移动的距离,根据距离大小判断删除按钮是否弹出

四、js代码

 1 // 左滑列表项,删除按钮出现,右滑消失
 2 window.onload = function(){
 3     //获取rem的值
 4     sRem = document.querySelector(‘html‘).style.fontSize;
 5     sRem = parseInt(sRem);
 6     var items = document.querySelectorAll(‘.item‘);
 7
 8     var deletes = document.querySelectorAll(‘.delete‘);
 9     //给每个Li绑定滑动事件
10     var startX = 0,moveX = 0,distanceX = 0;
11
12     var translateX = 0;
13
14     var flag = 0;
15
16     var target ;//记录当前滑动的列表项
17     items.forEach(function(v,i){
18
19         v.addEventListener(‘touchstart‘,function(e){
20             startX = e.touches[0].clientX;
21
22
23             //当操作下一行列表项的时候,把上一次操作元素恢复原来的位移
24             if(target !== this && target){
25                 target.style.transform = ‘translateX(0rem)‘;
26                 target.style.webkitTransform = ‘translateX(0rem)‘;
27             }
28
29         })
30         v.addEventListener(‘touchmove‘,function(e){
31             moveX = e.touches[0].clientX;
32
33             distanceX = (moveX - startX)/sRem;
34                 //在起始位置只能向左移动
35                 if(translateX == 0 && distanceX < 0){
36
37                     transX(this,distanceX);
38
39
40                 }
41                 //在最左端的时候,只能向右移动
42                 if(translateX == -4 && distanceX > 0){
43                     distanceX += -4;
44                     transX(this,distanceX);
45
46                 }
47
48
49         })
50         v.addEventListener(‘touchend‘,function(e){
51             //点击删除按钮时,避免执行touch事件
52             deletes.forEach(function(v,i){
53                 if(v == e.target){
54                     flag = 1;
55                 }
56             })
57             if(flag){
58                 flag = 0 ;
59                 return;
60             }
61             //移动向左超过一半,就完全滑动到左边
62             if(distanceX < -2 ){
63                 v.style.transform = ‘translateX (‘ + (-4) + ‘rem)‘;
64                 v.style.webkitTransform = ‘translateX(‘ + (-4) + ‘rem)‘;
65                 translateX = -4;
66
67             }
68             //移动向右超过一半,就完全滑动到起始位置
69             if(distanceX >= -2){
70                 v.style.transform = ‘translateX (‘ + 0 + ‘rem)‘;
71                 v.style.webkitTransform = ‘translateX(‘ + 0 + ‘rem)‘;
72                 translateX = 0;
73             }
74
75             target = this;
76             startX = 0;
77             moveX = 0 ;
78             distanceX = 0 ;
79
80         })
81     })
82
83     //列表项位移函数
84     function transX(v,x){
85     //限制向左滑动的最大距离
86                 if(x <= -4){
87                     x = -4;
88
89                 }
90     //限制向右滑动的最大距离
91                 if(x >= 0){
92                     x = 0;
93                 }
94
95                 v.style.transform = ‘translateX (‘ + x + ‘rem)‘;
96                 v.style.webkitTransform = ‘translateX(‘ + x + ‘rem)‘;
97
98     }
99 }
时间: 2025-01-18 16:37:17

仿qq会话列表滑动效果的相关文章

关于高仿微信对话列表滑动删除效果代码优化

原文:http://blog.csdn.net/singwhatiwanna/article/details/17515543 最近公司项目需用到微信滑动拉出按钮的效果,发现一位牛人已经实现了相关效果,但控件仍与业务代码存有耦合,于是花了点时间做了些去耦合,并于此进行记录,以防遗忘. 个人认为耦合主要在于两点: 第一点是SlideListView中的onTouchEvent 通过获取item间接得到SlideView,但这样会引入外部数据类MessageItem.          @Overr

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

因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码.   一. 需要用到的知识如下: ①安卓事件分发机制:(http://blog.csdn.net/lvxiangan/article/details/9309927  或 http://gundumw100.iteye.com/blog/1052270) ②安卓View绘制:http://blog.csdn.net/

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px

基于Qt的类似QQ好友列表抽屉效果的实现

前段时间在忙毕业设计,所以一直没有更新博客.今天答辩完以后,将对我的毕业设计进行模块展示,供Qt初学者进行参考. 毕业设计题目:Linux系统下基于Qt的局域网即时通信系统设计与实现 其中我有一个类似于QQ的好友列表,然后对好友可以进行分组管理,毕设中具体效果图如下: 网上查寻到的设计思路: 1.采用QToolBox的方式,虽然看起来有点样子,但是并不是我们所熟悉的好友列表,比如:http://blog.csdn.net/qianguozheng/article/details/6719074

高仿微信对话列表滑动删除效果(转)

前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突,也许你需要了解下android中点击事件的派发流程,请参考Android源码分析-点击事件派发机制.我的解决思路是这样的:重写ListView的onInterceptTouchEvent方法,在move的时候做判断,如果是左右滑动就返回false,否则返

【转】高仿微信对话列表滑动删除效果--不错

原文网址:http://blog.csdn.net/singwhatiwanna/article/details/17515543 转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17515543 前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因

高仿微信对话列表滑动删除效果

前言 用过微信的都知道.微信对话列表滑动删除效果是非常不错的,这个效果我们也能够有. 思路事实上非常easy,弄个ListView.然后里面的每一个item做成一个能够滑动的自己定义控件就可以.由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突.或许你须要了解下android中点击事件的派发流程,请參考Android源代码分析-点击事件派发机制.我的解决思路是这种:重写ListView的onInterceptTouchEvent方法,在move的时候做推断,假设是左右滑动就返回

js高仿QQ消息列表左滑功能

该组件,主要功能类似于QQ消息列表左滑出现删除.标为已读等按钮的功能:现在的版本用的是纯javaScript编写:后续会跟进 angularJs 开发的类似组件以及jquery的; 下面,就让我们来认识下怎么使用该程序: 在该程序里,总共分为四个文件: 1 .css文件夹 2. img 图片文件夹 3. js文件 4. index.html  主页面: 稍后,你可以自行下载,打开运行观看效果: 二.代码讲解 1.此html结构,为不可修改结构 <ul class="list-ul"

仿QQ好友列表界面的实现

TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style效果都有,但是tableView不能实现2种效果同时存在. 其实只是用到了Plain这个style,只是在cell的个数显示上做了个处理(个人见解,希望可以帮到有需要的人.....) 当通讯录那一组的cell的组头视图中的button是普通状态下的时候,并不是不显示cell,而是显示一个没有任何内容