有这样一个需求:

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. C# SocketUdpServer

    public interface ISocketUdpServer { void Start(); void Stop(); int SendData(byte[] data, IPEndPoint ...

  2. Excel的vlookup函数的用法

    VLOOKUP函数用于搜索指定区域内首列满足条件的元素,确定待检测单元格在区域中的行序号,再进一步返回选定单元格的值. 为了讲解的需要,特制作如图所示的表格.当然,大家也可以根据自己的实际情况设计合适 ...

  3. MYSQL DATE_FORMAT() 函数时间大小比较

    DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. DATE_FORMAT(date,format) 可以使用的格式有: 格式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 ...

  4. jQuery事件篇---基础事件

    写在前面: 有一段时间未更新博客了,利用这段时间,重新看了<jQuery基础教程 第四版>和<锋利的jQuery 第二版>,这两本书绝对是jQuery入门非常好的书,值得多读几 ...

  5. nginx+uwsgi部署flask应用后只能在本机访问解决办法,ipv4 和ipv6

    我的系统是centos7 nginx监听8888端口 在window下  :telnet 192.168.81.224 8888  发现连接不上, 端口22能连上 关闭224的防火墙就好了 syste ...

  6. Code Signal_练习题_Add Border

    Given a rectangular matrix of characters, add a border of asterisks(*) to it. Example For picture = ...

  7. Angular中EventEmitter不是泛型类型

    今天在做angular发射数据时,报错:EventEmitter不是泛型类型, 当时第一点就想到是不是没有引入,一看引入了 后面看api文档发现引入错了,其实是引入下面的 可能是之前快捷输入时,IDE ...

  8. 用CSS3/JS绘制自己想要的按钮

    我认为按钮的绘制分以下三个步骤 第一步,绘制按钮的轮廓 选择合适的html标签,设置轮廓的CSS /* html代码 */ <a href="#" class="b ...

  9. jQuery瀑布流+无限加载图片

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 【HTML基础】<acronym>和<abbr>的区别

    缩写标签<acronym> <abbr>的区别 大家都知道HTML定义缩写有<acronym> <abbr>两种标签,但是经常分不清楚他们.这两个标签虽 ...