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


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 相关文章推荐
document 和 document.all 分别什么时候用
Jun 22 Javascript
angularJS 中input示例分享
Feb 09 Javascript
表单验证正则表达式实例代码详解
Nov 09 Javascript
js获取Get值的方法
Sep 29 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
Dec 07 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 Javascript
JavaScript箭头函数_动力节点Java学院整理
Jun 28 Javascript
vue-router实现tab标签页(单页面)详解
Oct 17 Javascript
详解VUE调用本地json的使用方法
May 15 Javascript
使用axios请求接口,几种content-type的区别详解
Oct 29 Javascript
微信小程序修改数组长度的问题的解决
Dec 17 Javascript
JavaScript将数组转换为链表的方法
Feb 16 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
PHP中动态显示签名和ip原理
2007/03/28 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Python MD5文件生成码
2009/01/12 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
优秀员工评优方案
2014/06/13 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
优秀纪检干部材料
2014/08/27 职场文书
先进班组事迹材料
2014/12/25 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python