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


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 相关文章推荐
JSON.parse 解析字符串出错的解决方法
Jul 08 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
Jun 10 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
May 25 Javascript
jQuery Easyui datagrid/treegrid 清空数据
Jul 09 Javascript
详解Node.js:events事件模块
Nov 24 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
JavaScript实现的DOM绘制柱状图效果示例
Aug 08 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 Javascript
Vue Prop属性功能与用法实例详解
Feb 23 Javascript
layui递归实现动态左侧菜单
Jul 26 Javascript
javascript随机变色实例代码
Oct 15 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
php2html php生成静态页函数
2008/12/08 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
php格式文件打开的四种方法
2018/02/24 PHP
php的扩展写法总结
2019/05/14 PHP
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python isinstance函数用法详解
2020/02/13 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
python爬取youtube视频的示例代码
2021/03/03 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
总经理职责
2013/12/22 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
班级管理经验交流材料
2015/11/02 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android