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


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 简单的进度条实现代码
Mar 11 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 Javascript
简单介绍JavaScript数据类型之隐式类型转换
Dec 28 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
js实现日历的简单算法
Jan 24 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 Javascript
微信小程序用户自定义模版用法实例分析
Nov 28 Javascript
webpack-dev-server远程访问配置方法
Feb 22 Javascript
swiper4实现移动端导航栏tab滑动切换
Oct 16 Javascript
vue3+typescript实现图片懒加载插件
Oct 26 Javascript
VUE解决跨域问题Access to XMLHttpRequest at
May 06 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
一些常用的php简单命令代码集锦
2007/09/24 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
重新认识php array_merge函数
2014/08/31 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
javascript options属性集合操作代码
2009/12/28 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
在Django中创建动态视图的教程
2015/07/15 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
3分钟学会一个Python小技巧
2018/11/23 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
物业管理应届生求职信
2013/10/28 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
大学新闻系求职信
2014/06/03 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
报名委托书
2015/01/29 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
Mysql排序的特性详情
2021/11/01 MySQL
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers
TS 类型收窄教程示例详解
2022/09/23 Javascript