使用zepto实现QQ消息左滑删除效果
有这样一个需求:
1. 有一个列表,将每一个列表项左滑动出现删除按钮;
2. 右滑动隐藏删除按钮;
3. 点击这个删除按钮删除该列表项。
完成以后的效果:

这是微信网页端的页面,使用的是 zepto 库。于是我按照这个需求,写好了html结构,样式和脚本,感觉没问题了,去调试,结果交互没效果,然而自己都不知道问题出在哪里。
具体到该项目中,我给 ".item-info" 添加左滑和右滑事件,给 ".remove" 添加删除事件,删除该列表项。
<li class="device-item">
<div class="item-info">
<div class="device-info">
<img src="~/Content/img/alam-icon.png" alt="家报设备" class="img">
<div class="text">
<div class="code">@info.DeviceBarCode</div>
<div class="detect">
浓度:<label detect>--</label>%LEL
</div>
<div class="state">
状态:<label state>--</label>
</div>
</div>
</div>
<div class="more-info">
<a href="javascript: alert('开发中,敬请期待!')" title="设备详情" class="device-details">设备详情</a>
<a href="javascript: alert('开发中,敬请期待!')" title="绑定信息" class="bind-info">绑定信息</a>
</div>
</div>
<div class="remove icon icon-remove"></div>
</li>
这个项目的开发环境在 VS 中,所以上图中 img 的路径出现了 "~" ,这不必理会,与本文要讨论的解决方案无关。
CSS 如下,CSS 使用 LESS 编译生成,去除了讲解这个需求无关的代码:
.device-item {
z-index:;
margin-bottom: 20px;
position: relative;
width: 100%;
height: 144px;
overflow: hidden;
}
.device-item .item-info {
z-index:;
position: absolute;
top:;
left:;
width: 100%;
height: 144px;
}
.device-item .remove {
z-index:;
position: absolute;
top: 50%;
right: -70px;
transform: translateY(-50%);
width: 70px;
height: 144px;
line-height: 144px;
text-align: center;
font-size: 30px;
color: #f00;
}
这段 CSS 中,我将列表项 ".device-item" 设置为了固定的高度 144px,避免因为定位属性的破坏性造成该元素内容不显示的问题。
将删除按钮宽度设置为了 70px,距离右侧 -70px。由于 ".icon.icon-remove" 类包含了删除的图标,故该元素中没有多余的子元素和相应的样式。
// 每一项列表左滑出现删除按钮,提供解绑该设备
$(".item-info").on("swipeLeft", function () { //左滑显示隐藏的删除按钮
$(this).animate({ left: "-70px" }, 400, "linear").siblings(".remove").animate({ right: 0 }, 400, "linear");
});
$(".item-info").on("swipeRight", function () { //右滑恢复
$(this).animate({ left: 0 }, 400, "linear").siblings(".remove").animate({ right: "-70px" }, 400, "linear");
});
$(".remove").tap(function () { //删除
$(this).parent().remove();
});
以上 js 代码是最终的代码,没有问题,可是开始调试的时候就是没有出现我想要的需求,却出现了这样的效果:
1. 页面可以向左滑动,可是滑动的整个文档(也就是从任何地方向左滑动整个页面都向左滑了)
2. 点击 ".remove" 按钮没反应。
原因是这样的:
1. 我没有给列表项 ".device-item" 设置 overflow: hidden;
导致 ".remove" 删除按钮没有被隐藏,只是被挤到页面可视区域之外了,向左滑动的时候是滑动的整个页面,相当于出现了横向滚动条,滑动查看右边的内容。
2. 我没有在 HTML 中引入 touch.js 和 fx.js 两个 zepto 模块。
zepto 默认构建包含: Core, Ajax, Event, Form, IE几个模块,要使用 animate 需要再引用 fx 模块,要使用 tap 需要再引用 touch 模块。
该点参考 zepto 官网 zepto modules 部分的说明 http://zeptojs.com/#modules

引用以上模块可以通过在 github 上下载 https://github.com/madrobby/zepto 源文件包,打开 src 目录引用相应的代码。
<script src="~/Content/Scripts/zepto.min.js"></script>
<script src="~/Content/Scripts/touch.js"></script>
<script src="~/Content/Scripts/fx.js"></script>
使用zepto实现QQ消息左滑删除效果的更多相关文章
- 类似QQ消息左滑删除的Demo
最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...
- android QQ消息左滑动删除实例(优化版SwipeListViewEX)
仿 QQ消息左滑动删除item消息实例 源代码参考:http://blog.csdn.net/gaolei1201/article/details/42677951 自己作了一些调整,全部代码下载地址 ...
- 仿QQ列表左滑删除
一直想写个仿QQ通讯列表左滑删除的效果,今天终于忙里偷闲,简单一个. 大概思路是这样的: 通过 ontouchstartontouchmoveontouchend 结合css3的平移. 不多说,直接上 ...
- 微信小程序实现左滑删除效果(原生/uni-app)
实现效果 列表中侧滑删除 删除不同时存在 scrollview上下滑动与侧滑删除不影响 uni-app实现 html部分 <template> <scroll-view :scrol ...
- Android开发学习之路-PopupWindow和仿QQ左滑删除
这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像 ...
- 微信小程序实现左滑删除源码
左滑删除效果在app的交互方式中十分流行,比如全民应用微信 微信左滑删除 再比如曾引起很大反响的效率app Clear Clear左滑删除 从技术上来说,实现这个效果并不困难,响应一下滑动操作,移动一 ...
- 模仿QQ左滑删除
需求: 1.左滑删除 2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏 3.一次只允许滑开一个item 还有,根本不需要自定义view来实现,谨防入坑 布局: <?xm ...
- [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子
转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...
- 微信小程序独家秘笈之左滑删除
代码地址如下:http://www.demodashi.com/demo/14056.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
随机推荐
- CentOS下安装Redis(转载)
Redis是一个高性能的,开源key-value型数据库.是构建高性能,可扩展的Web应用的完美解决方案,可以内存存储亦可持久化存储.因为要使用跨进程,跨服务级别的数据缓存,在对比多个方案后,决定使用 ...
- mysql索引对单表查询的影响
索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行.表越大,花费时间越多. 如果表对于查询的列有一个索引,MySQL能快速到达 ...
- Vue生命周期学习
转自https://www.w3cplus.com/vue/vue-instances-and-life-cycles.html Vue实例虽然没有完全遵循MVVM模型,但Vue的设计无疑受到了它的启 ...
- 如鹏网学习笔记(五)MySql基础
MySQL基础 一.数据库概念 1,网友装备信息.论坛帖子信息.QQ好友关系信息.学籍管理系统中的学生信息等都要“持久化”的保存到一个地方, 如果通过IO写到文件中,那么会非常麻烦,而且不利于多人共享 ...
- ssm项目快速搭建(注解)
dao层配置 dao层配置注意事项: 1.Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同 2.Mapper.xml 接口方法名和 Mapper.xml 中定义的 ...
- java中程序上线报错: tomcat中java.lang.OutOfMemoryError: PermGen space
在程序测试没问题之后,上线试运行,在运行的过程中某个功能一点击就报如下错,然后重启服务器就好了,一会又是如此,解决方法如下(亲测) PermGen space的全称是Permanent Generat ...
- MyBatis学习(二)---数据表之间关联
想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...
- oracle数据库的安装与连接关键点
一.window xp系统上安装Oracle Database 10G 解锁Scott.Hr账号并重置口令 远程连接数oracle数据库地址 二.在Mac系统上使用Navicat远程连接oracle数 ...
- MySQL Metadata
http://www.devart.com/dotconnect/mysql/docs/MetaData.html In this overload first parameter is name o ...
- PhpStorm 自定义快捷键
PhpStorm 两个重要快捷键 1.CTRL+SHIFT+A 用于恢复隐藏项 2.文件之间的快速跳转 CTRL+SHIFT+N 3.自定义快捷键 第一步:打开左上角file-setting 第二步: ...