微信小程式實現列表左右滑動
做微信小程式開發,和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 }
為大家推薦現在關注度比較高的微信小程式教程一篇:《微信小程式開發教程》小編為大家精心整理的,希望喜歡。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。