有这样一个需求:

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消息左滑删除效果的更多相关文章

  1. 类似QQ消息左滑删除的Demo

    最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...

  2. android QQ消息左滑动删除实例(优化版SwipeListViewEX)

    仿 QQ消息左滑动删除item消息实例 源代码参考:http://blog.csdn.net/gaolei1201/article/details/42677951 自己作了一些调整,全部代码下载地址 ...

  3. 仿QQ列表左滑删除

    一直想写个仿QQ通讯列表左滑删除的效果,今天终于忙里偷闲,简单一个. 大概思路是这样的: 通过 ontouchstartontouchmoveontouchend 结合css3的平移. 不多说,直接上 ...

  4. 微信小程序实现左滑删除效果(原生/uni-app)

    实现效果 列表中侧滑删除 删除不同时存在 scrollview上下滑动与侧滑删除不影响 uni-app实现 html部分 <template> <scroll-view :scrol ...

  5. Android开发学习之路-PopupWindow和仿QQ左滑删除

    这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像 ...

  6. 微信小程序实现左滑删除源码

    左滑删除效果在app的交互方式中十分流行,比如全民应用微信 微信左滑删除 再比如曾引起很大反响的效率app Clear Clear左滑删除 从技术上来说,实现这个效果并不困难,响应一下滑动操作,移动一 ...

  7. 模仿QQ左滑删除

    需求: 1.左滑删除 2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏 3.一次只允许滑开一个item 还有,根本不需要自定义view来实现,谨防入坑 布局: <?xm ...

  8. [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子

    转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...

  9. 微信小程序独家秘笈之左滑删除

    代码地址如下:http://www.demodashi.com/demo/14056.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

随机推荐

  1. 常用 JavaScript 小技巧及原理详解

    善于利用JS中的小知识的利用,可以很简洁的编写代码 1. 使用!!模拟Boolean()函数 原理:逻辑非操作一个数据对象时,会先将数据对象转换为布尔值,然后取反,两个!!重复取反,就实现了转换为布尔 ...

  2. 撩课-Java每天5道面试题第22天

    141.Spring AOP是什么? AOP:面向切面编程 AOP技术利用一种称为“横切”的技术, 解剖封装的对象内部, 并将那些影响了多个类的公共行为 封装到一个可重用模块, 这样就能减少系统的重复 ...

  3. spring底层原理解析

    注解测试:如何使用注解(去掉配置文件)开发 新建MainConfig类 注解测试:新建MainTest2注解测试,用来测试//AnnoatationConfigApplicationContext: ...

  4. ArrayList封装

    package com.cn.test.jihe; import java.util.Arrays; /** * * insert * delete * update * get * */ publi ...

  5. linux ubuntu 学习总结(day01)基本命令学习

    个人总结,请尊重版权,转载请在显眼地方注明出处:https://www.cnblogs.com/sunshine5683/p/9948259.html day(01)基本命令学习 今天开始自学linu ...

  6. Mac PHPStorm快捷键总结

    全局搜索(command + shift + F) 显示类中的方法 (command + 7) 函数追踪 (command +鼠标点击) 单行注释/取消(command + /) 输入行号跳到某一行( ...

  7. Struts2 数据校验之四兄弟

    现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会. 有了这验证就很好的保证了我们的信息的准确性和安全性. 接下来我给大家讲解一 ...

  8. P1025[SCOI2009]游戏

    windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按 顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的 ...

  9. npm 更新至最新版本

    有时npm版本低了,一些操作有问题,要更新成最新. 官网中:  https://www.npmjs.com/get-npm     先查看对应的 node 版本 和 npm版本 Check that ...

  10. JavaScript : Array assignment creates reference not copy

    JavaScript : Array assignment creates reference not copy 29 May 2015 Consider we have an array var a ...