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


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 相关文章推荐
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
详解javascript函数的参数
Nov 10 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
Feb 07 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
Node解决简单重复问题系列之Excel内容的获取
Jan 02 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 Javascript
新手简单了解vue
May 29 Javascript
微信小程序 数据缓存实现方法详解
Aug 26 Javascript
面试中canvas绘制图片模糊图片问题处理
Mar 13 Javascript
详解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数据采集的详解
2013/06/02 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
JavaScript 指导方针
2007/04/05 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
js 学习笔记(三)
2009/12/29 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
jQuery中的deferred使用方法
2017/03/27 jQuery
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
python实现报表自动化详解
2017/11/16 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
日语专业推荐信
2013/11/12 职场文书
亲子拓展活动方案
2014/02/20 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
同意报考证明
2015/06/17 职场文书
公司保密管理制度
2015/08/04 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
Python基础之函数嵌套知识总结
2021/05/23 Python