微信小程序实现列表左右滑动


Posted in Javascript onNovember 19, 2020

做微信小程序开发,和app一样经常会用到列表左右滑动操作(删除等),目前微信小程序官方没有提供相应的控件。

只能我们自己来做,方法很多,我这里给个思路,仅供参考,欢迎讨论。

1、我们可以把列表的元素放在scroll-view控件中,并且让scroll-view实现横向滑动

2、把列表内容项的宽度占满手机宽度,利用rpx特性(自适应屏幕),默认iphon6就是750rpx,只要设置大于等于750rpx就可以。

3、监听滑动后列表操作事件,即可

细节点:

(1)scroll-view实现横向滑动,这个微信文档写的不是很详细

第一步,wxml中在scroll-view控件中,写上 scroll-x

<scroll-view scroll-x class='scroll-container'>
</scroll-view>

第二步,要在wxss样式文件中增加上white-space: nowrap;

.scroll-container{
height: 200rpx;
background-color: floralwhite;
margin-top: 20rpx;
display: flex;
flex-direction: row;
align-items: center;
white-space: nowrap;
width: 100%;}

第三步:scroll-view 默认滑动的时候,是有个线条的。体验不好,去掉。大家可以对比下效果

::-webkit-scrollbar{ width: 0; height: 0; color: transparent;}

(2)比如滑动删除第一条数据后,第二条数据的默认是处于滑动后状态,把操作项都显示出来了,建议每次操作完,把scroll-view的位置复原。修改scroll-left的值就好,我每次操作完,就把该值设置为0。

<scroll-view scroll-x class='scroll-container' scroll-left='{{scroll_left}}'

(3)列表内容可能会超出屏幕默认值,我这个例子是单行显示的,所有只要文字大于一定数量就截取。单独写了个函数把数据处理了下,这个可以实际情况实际处理。

代码如下:

wxml:注意class done1是为了做完成后效果,这里只是演示就简单实现了下,实际应该针对对应的列表进行处理,可以考虑把原数据做成数组字典。 /data-content 是为了删除的时候,知道是删除了哪一行/

<view>
 <block wx:for='{{items}}' wx:key=''>
 <scroll-view scroll-x class='scroll-container' scroll-left='{{scroll_left}}'>
  <text class='content {{done1}}'>{{item}}</text>
  <text class='del' data-content='{{index}}' bindtap='del'>删除</text>
  <text class='done' data-content='{{index}}' bindtap='done'>完成</text>
 </scroll-view>
 </block>
</view>

wxss:

::-webkit-scrollbar{

 width: 0;
 height: 0;
 color: transparent;

}

.scroll-container{

 height: 200rpx;
 background-color: floralwhite;
 margin-top: 20rpx;
 display: flex;
 flex-direction: row;
 align-items: center;
 white-space: nowrap;
 width: 100%;

}

.content{

 padding-left: 20rpx;
 display: inline-block;
 line-height: 200rpx;
 font-size: 40rpx;
 width: 750rpx;

}

.del{

 display: inline-flex;
 width: 200rpx;
 height: 200rpx;
 line-height: 200rpx;
 align-items: center;
 justify-content: center;
 background-color: red;
 color: white;

}

.done{
 display: inline-flex;
 width: 200rpx;
 height: 200rpx;
 line-height: 200rpx;
 align-items: center;
 justify-content: center;
 background-color: green;
 color: white;
}
.done1{
 text-decoration: line-through;
 color: gainsboro;
}

js:

// pages/test06/test06.js
//hhString是为了处理下列表内容的,超出了就是用...显示,可以注释掉不用
import {hhString} from '../../utils/util.js';
Page({

 /**

 * 页面的初始数据

 */

 data: {

 items: ['我是第一条测试数据', '我是第二条测试数据', '我是第三条测试数据 ', '我是第四条测试数据', '我是第五条测试数据 ', '我是第六条测试数据,数据很多很多很多很多很多', '我是第七条测试数据', '我是第八条测试数据', '我是第九条测试数据'],

 scroll_left:'0rpx',

 },

 /**
 * 生命周期函数--监听页面加载
 */

 onLoad: function (options) {
 //hhString是为了处理下列表内容的,超出了就是用...显示,可以注释掉不用

 this.setData({

  items:hhString(this.data.items)

 })

 },

 del:function(event){

 //event.currentTarget.dataset.content获取到列表的所在的行号
 //splice 删除数组数据函数,第一个参数是位置,第二个是个数

 this.data.items.splice(event.currentTarget.dataset.content,1);
 this.setData({
  items: this.data.items,
  scroll_left:'0rpx'

 });

 },

 done: function (event) {
 //这里简易实现了下效果,没有针对对应的行号,实际业务再修改
 this.setData({
  scroll_left: '0rpx',
  done1: 'done1'

 });

 },

})

util->util.js

const hhString = (data)=>{
 let hstring = [];
 for(let val of data){
 if(val.length>10){
  val = val.substring(0,10);
  val = val+'...'

 }
 hstring.push(val);

 }
 return hstring;

}

module.exports = {
 hhString:hhString

}

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
js实现div闪烁原理及实现代码
Jun 24 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
Apr 17 Javascript
基于jquery css3实现点击动画弹出表单源码特效
Aug 31 Javascript
Javascript复制实例详解
Jan 28 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
Mar 27 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
bootstrap tooltips在 angularJS中的使用方法
Apr 10 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
Nov 06 Javascript
浅谈Vue的computed计算属性
Mar 21 Vue.js
详解JavaScript 中的批处理和缓存
Nov 19 #Javascript
Javascript中window.name属性详解
Nov 19 #Javascript
JavaScript实现图片合成下载的示例
Nov 19 #Javascript
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 #Vue.js
vue 插槽简介及使用示例
Nov 19 #Vue.js
微信小程序实现点击导航条切换页面
Nov 19 #Javascript
详解Vue的mixin策略
Nov 19 #Vue.js
You might like
星际原理概述
2020/03/04 星际争霸
简单的PHP缓存设计实现代码
2011/09/30 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php自定义session示例分享
2014/04/22 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
关于python写入文件自动换行的问题
2018/06/23 Python
详解python算法之冒泡排序
2019/03/05 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
python实现银行实战系统
2020/02/26 Python
Python 忽略文件名编码的方法
2020/08/01 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
python复合条件下的字典排序
2020/12/18 Python
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
毕业生应聘求职信
2014/07/10 职场文书
财政局个人总结
2015/03/04 职场文书
入党转正介绍人意见
2015/06/03 职场文书
小学感恩主题班会
2015/08/12 职场文书
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers