微信小程序 实现列表项滑动显示删除按钮的功能


Posted in Javascript onApril 13, 2017

微信小程序 实现列表项滑动显示删除按钮的功能

微信小程序并没有提供列表控件,所以也没有iOS上惯用的列表项左滑删除的功能,SO只能自己干了。

原理很简单,用2个层,上面的层显示正常的内容,下面的层显示一个删除按钮,就是记录手指滑动的距离,动态的来移动上层元素,当然上层用绝对定位。

wxml:

<view class="container">
 <view class="record-box" data-datetime="{{record.datetime}}" wx:for="{{detailList}}" wx:for-item="record">
  <view class="record" style="left:{{record.offsetX}}px" bindtouchstart="recordStart" catchtouchmove="recordMove" bindtouchend="recordEnd">
   <view class="left">
    <view>{{record.type}} {{record.count+record.unit}}</view>
    <view class="summary">{{record.remark}}</view>
   </view>
   <view class="right">
    {{record.datetime}}
   </view>
  </view>
  <view class="delete-box">
   <view>删除</view>
  </view>
 </view>
</view>

 wxss:

@import "../common/weui.wxss";
 
.container {
 box-sizing: border-box;
 padding: 0 0 0 0;
}
 
 
 
.record {
 display: flex;
 flex-direction: row;
 align-items: center;
 width:100%;
  height: 120rpx;
 position: absolute;
 justify-content: space-between;
 background-color: #fff;
}
 
.record .right{
 margin-right: 30rpx;
   color: #888888;
}
.record .left{
 margin-left: 30rpx;
  display: flex;
  flex-direction: column;
 justify-content: space-between;
}
 
.record .left .summary{
  color: #aaa;
 font-size: 30rpx;
 line-height: 30rpx;
 
}
 
.record-box{
 height: 120rpx;
 width: 100%;
 border-bottom: 1rpx solid #ddd;
 background-color: #fff;
}
 
.delete-box{
 background-color: #e64340;
 color: #ffffff;
 float: right;
 height: 100%;
 width: 80px;
 display: flex;
 align-items: center;
 justify-content: center;
}
 
.record-box:last-child {
 border-bottom: 0;
}
 
.record .r-item {
  
}

JS代码:

var detailList = [
  { datetime: '2017-01-01 17:00', count: 100, unit: 'ml', type: '开水', remark: '哈哈哈哈' },
  { datetime: '2017-01-01 17:01', count: 100, unit: 'ml', type: '开水' },
  { datetime: '2017-01-01 17:02', count: 100, unit: 'ml', type: '开水' }
];
var recordStartX = 0;
var currentOffsetX = 0;
Page(
  {
    data: {
      detailList: detailList
    }
    ,
    recordStart: function (e) {
      recordStartX = e.touches[0].clientX;
      currentOffsetX = this.data.detailList[0].offsetX;
      console.log('start x ', recordStartX);
    }
    ,
    recordMove: function (e) {
      var detailList = this.data.detailList;
      var item = detailList[0];
      var x = e.touches[0].clientX;
      var mx = recordStartX - x;
      console.log('move x ', mx);

      var result = currentOffsetX - mx;
      if (result >= -80 && result <= 0) {
        item.offsetX = result;
      }
      this.setData({
        detailList: detailList
      });
    }
    ,
    recordEnd: function (e) {
      var detailList = this.data.detailList;
      var item = detailList[0];
      console.log('end x ', item.offsetX);

      if (item.offsetX < -40) {
        item.offsetX = -80;

      } else {
        item.offsetX = 0;

      }
      this.setData({
        detailList: detailList
      });
    }

  }
);

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
js 鼠标点击事件及其它捕获
Jun 04 Javascript
jquery 多行滚动代码(附详细解释)
Jun 17 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
May 25 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
Oct 17 Javascript
SWFObject基本用法实例分析
Jul 20 Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
详解webpack运行Babel教程
Jun 13 Javascript
Vue.js实现的计算器功能完整示例
Jul 11 Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 #Javascript
Bootstrap实现各种进度条样式详解
Apr 13 #Javascript
微信小程序 本地数据存储实例详解
Apr 13 #Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 #Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 #Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
Apr 13 #Javascript
angularjs指令之绑定策略(@、=、&amp;)
Apr 13 #Javascript
You might like
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
Python线程同步的实现代码
2018/10/03 Python
Python实现FM算法解析
2019/06/18 Python
python求质数列表的例子
2019/11/24 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
施工班组长岗位职责
2014/01/05 职场文书
个人查摆剖析材料
2014/02/04 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
导游词之长城八达岭
2019/09/24 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
vue自定义右键菜单之全局实现
2022/04/09 Vue.js