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


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 相关文章推荐
JavaScript 10件让人费解的事情
Feb 15 Javascript
Javascript开发之三数组对象实例介绍
Nov 12 Javascript
AngularJS基础知识
Dec 21 Javascript
JavaScript针对网页节点的增删改查用法实例
Feb 02 Javascript
一看就懂:jsonp详解
Jun 01 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
Jan 27 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
ES6知识点整理之模块化的应用详解
Apr 15 Javascript
js 实现 list转换成tree的方法示例(数组到树)
Aug 18 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
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
$()JS小技巧
2007/07/21 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python 自动补全(vim)
2014/11/30 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
python把1变成01的步骤总结
2019/02/27 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
研究生自荐信
2013/10/09 职场文书
教师师德反思材料
2014/02/15 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
前台岗位职责
2015/02/13 职场文书
开会通知
2015/04/20 职场文书
2015初中政教处工作总结
2015/07/21 职场文书