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


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 相关文章推荐
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
总结Node.js中的一些错误类型
Aug 15 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
Dec 14 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
Jan 31 jQuery
Javascript的console['']常用输入方法汇总
Apr 26 Javascript
微信小程序版本自动更新的方法
Jun 14 Javascript
JavaScript相等运算符的九条规则示例详解
Oct 20 Javascript
JS实现图片幻灯片效果代码实例
May 21 Javascript
JavaScript监听键盘事件代码实现
Jun 03 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
python重试装饰器示例
2014/02/11 Python
解析Python编程中的包结构
2015/10/25 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
武汉高蓝德国际.net机试
2016/06/24 面试题
经典优秀个人求职信分享
2013/12/12 职场文书
户外拓展活动方案
2014/02/11 职场文书
学校端午节活动方案
2014/08/23 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
调任通知
2015/04/21 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
Python集合的基础操作
2021/11/01 Python