版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】小程序如何實現(xiàn)列表滾動上下聯(lián)動效果
這篇文章主要為大家展示了“小程序如何實現(xiàn)列表滾動上下聯(lián)動效果”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓在下帶領(lǐng)大家一起研究并學習一下“小程序如何實現(xiàn)列表滾動上下聯(lián)動效果”這篇文章吧。最近在做公司的一款小程序,其中有一塊的設(shè)計的是在列表做上下滾動的是時候,頂部的tab欄跟著一起聯(lián)動,當點擊tab欄的時候,列表數(shù)據(jù)也跟隨聯(lián)動。頂部的頭部區(qū)域不跟隨列表滾動;
頭部區(qū)域以下屬于滾動區(qū)域。2.1原理介紹這個地方的實現(xiàn)主要借助了微信小程序原生的scroll-view組件。使用它的scroll-into-view屬性,可以實現(xiàn)點擊頂部的tab欄,將頁面滾動到指定的列表位置;使用bindscroll事件,可以知道當前頁面滾動的距離,根據(jù)滾動的距離做tab欄的切換操作;2.1頁面布局代碼先說下界面的整體布局,主要分為兩部分,頭部固定區(qū)域+可滾動列表區(qū)域??蓾L動的列表區(qū)域的標題欄當滾動一定的距離后,它也要固定在頂部。代碼實現(xiàn):<!--index.wxml-->
<view
class="list">
<!--頂部固定區(qū)域-->
<view
style="height:
88rpx;width:
100%;background-color:
burlywood;text-align:
center;">頭部區(qū)域</view>
<!--可滾動區(qū)域-->
<scroll-view
scroll-y="true"
style="width:
100%;
height:
{{scrollAreaHeight}}px;"
bindscroll="scroll"
scroll-into-view="{{scrollToItem}}"
scroll-with-animation="true"
scroll-top="{{scrollTop}}">
<!--水平滾動的tab欄-->
<scroll-view
scroll-x="true"
style="height:
88rpx;width:
100%;">
<view
class="head-area
{{float
?
'head-float'
:
''}}"
>
<view
class="head-area-item
{{curSelectTab
===
index
?
'head-area-item-select'
:
''}}"
wx:for="{{appGroupList}}"
bindtap="tabClick"
data-index="{{index}}">
{{}}
</view>
</view>
</scroll-view>
<!--數(shù)據(jù)列表-->
<view
class="list-group"
style="height:
{{listGroupHeight}}px;">
<view
class="list-group-item"
id="v_{{index}}"
wx:for="{{appGroupList}}"
data-index="{{index}}">
<view
class="group-name">
{{}}
</view>
<view
class="group-children"
>
<view
wx:for="{{item.children}}"
class="group-children-item"
style="width:
{{itemWidth}}px;">
<image
src="{{item.url}}"></image>
<view>{{}}</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>在布局代碼中有幾個點需要注意:1、scrollAreaHeight滾動區(qū)域的高度計算。通過獲取當前設(shè)備的窗口高度減去頂部固定區(qū)域的高度2、水平tab欄是否置頂。根據(jù)頁面的滾動距離來判斷,如果滾動距離大于或者等于水平tab欄的高度,則置頂;3、設(shè)置數(shù)據(jù)列表的id="v_{{index}}"id,后續(xù)點擊tab欄滾動到指定的位置就是根據(jù)這個id去實現(xiàn)的。2.2樣式代碼/**index.wxss**/
.list{
width:
100%;
height:
100%;
display:
flex;
flex-direction:
column;
}
.head-area{
display:
flex;
flex-direction:
row;
flex-wrap:
nowrap;
height:
88rpx;
width:
100%;
padding:
0
10;
}
.head-area-item{
display:
flex;
height:
88rpx;
text-align:
center;
width:
150rpx;
align-items:
center;
justify-content:
center;
}
.head-area-item-select{
color:
#09bb07;
}
image{
width:
88rpx;
height:
88rpx;
}
.list-group{
display:
flex;
width:
100%;
height:
1000%;
flex-direction:
column;
}
.list-group-item{
display:
flex;
width:
100%;
background-color:
#aaa;
flex-direction:
column;
}
.group-name{
height:
88rpx;
display:
flex;
text-align:
center;
align-items:
center;
margin-left:
20rpx;
}
.group-children{
display:
flex;
flex-direction:
row;
flex-wrap:
wrap;
width:
100%;
}
.group-children-item{
height:
160rpx;
display:
flex;
flex-direction:
column;
justify-content:
center;
align-items:
center;
}
.head-float{
position:
fixed;
top:
88rpx;
background-color:
#ffffff;
}2.3邏輯代碼//
index.js
Page({
heightArr:
[],
//記錄scroll-view滾動過程中距離頂部的高度
distance:
0,
data:
{
appGroupList:[
{name:"分組01",children:[{"name":"測試0","url":"/images/bluetooth.png"},
{"name":"測試1","url":"/images/bluetooth.png"},
{"name":"測試2","url":"/images/bluetooth.png"},
{"name":"測試3","url":"/images/bluetooth.png"},
{"name":"測試4","url":"/images/bluetooth.png"},
{"name":"測試5","url":"/images/bluetooth.png"},
{"name":"測試6","url":"/images/bluetooth.png"},
{"name":"測試7","url":"/images/bluetooth.png"}]},
{name:"分組02",children:[{"name":"測試0","url":"/images/bluetooth.png"},
{"name":"測試1","url":"/images/bluetooth.png"},
{"name":"測試2","url":"/images/bluetooth.png"},
{"name":"測試3","url":"/images/bluetooth.png"},
{"name":"測試4","url":"/images/bluetooth.png"},
{"name":"測試5","url":"/images/bluetooth.png"},
{"name":"測試6","url":"/images/bluetooth.png"},
{"name":"測試7","url":"/images/bluetooth.png"}]},
{name:"分組03",children:[{"name":"測試0","url":"/images/bluetooth.png"},
{"name":"測試1","url":"/images/bluetooth.png"},
{"name":"測試2","url":"/images/bluetooth.png"},
{"name":"測試3","url":"/images/bluetooth.png"},
{"name":"測試4","url":"/images/bluetooth.png"},
{"name":"測試5","url":"/images/bluetooth.png"},
{"name":"測試6","url":"/images/bluetooth.png"},
{"name":"測試7","url":"/images/bluetooth.png"}]},
{name:"分組04",children:[{"name":"測試0","url":"/images/bluetooth.png"},
{"name":"測試1","url":"/images/bluetooth.png"},
{"name":"測試2","url":"/images/bluetooth.png"},
{"name":"測試3","url":"/images/bluetooth.png"},
{"name":"測試4","url":"/images/bluetooth.png"},
{"name":"測試5","url":"/images/bluetooth.png"},
{"name":"測試6","url":"/images/bluetooth.png"},
{"name":"測試7","url":"/images/bluetooth.png"}]},
{name:"分組05",children:[{"name":"測試0","url":"/images/bluetooth.png"},
{"name":"測試1","url":"/images/bluetooth.png"},
{"name":"測試2","url":"/images/bluetooth.png"},
{"name":"測試3","url":"/images/bluetooth.png"},
{"name":"測試4","url":"/images/bluetooth.png"},
{"name":"測試5","url":"/images/bluetooth.png"},
{"name":"測試6","url":"/images/bluetooth.png"},
{"name":"測試7","url":"/images/bluetooth.png"}]},
],
itemWidth:
wx.getSystemInfoSync().windowWidth
/
4,
scrollAreaHeight:wx.getSystemInfoSync().windowHeight
-
44,
float:false,
curSelectTab:0,
scrollToItem:null,
scrollTop:
0,
//到頂部的距離
listGroupHeight:0,
},
onReady:
function
()
{
this.cacluItemHeight();
},
scroll:function(e){
console.log("scroll:",e);
if(e.detail.scrollTop>=44){
this.setData({
float
:
true
})
}
else
if(e.detail.scrollTop<44)
{
this.setData({
float
:
false
})
}
let
scrollTop
=
e.detail.scrollTop;
let
current
=
this.data.curSelectTab;
if
(scrollTop
>=
this.distance)
{
//頁面向上滑動
//列表當前可視區(qū)域最底部到頂部的距離
超過
當前列表選中項距頂部的高度(且沒有下標越界),則更新tab欄
if
(current
+
1
<
this.heightArr.length
&&
scrollTop
>=
this.heightArr[current])
{
this.setData({
curSelectTab:
current
+
1
})
}
}
else
{
//頁面向下滑動
//如果列表當前可視區(qū)域最頂部到頂部的距離
小于
當前列表選中的項距頂部的高度,則切換tab欄的選中項
if
(current
-
1
>=
0
&&
scrollTop
<
this.heightArr[current
-
1])
{
this.setData({
curSelectTab:
current
-
1
})
}
}
//更新到頂部的距離
this.distance
=
scrollTop;
},
tabClick(e){
this.setData({
curSelectTab:
e.currentTarget
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學南國商學院《理化檢測下》2023-2024學年第一學期期末試卷
- 廣東輕工職業(yè)技術(shù)學院《景觀設(shè)計快題》2023-2024學年第一學期期末試卷
- 廣東農(nóng)工商職業(yè)技術(shù)學院《行政管理專業(yè)導(dǎo)論》2023-2024學年第一學期期末試卷
- 廣東梅州職業(yè)技術(shù)學院《影視編劇》2023-2024學年第一學期期末試卷
- 廣東茂名幼兒師范??茖W?!禞SP程序設(shè)計》2023-2024學年第一學期期末試卷
- 四年級數(shù)學(四則混合運算)計算題專項練習與答案
- 國學智慧(東北師范大學)學習通測試及答案
- 2025新北師大版英語七年級下單詞表
- 【名師一號】2020-2021學年新課標版物理選修3-1-第二章恒定電流-測試
- 【名師一號】2020-2021學年高中英語北師大版必修4-隨堂演練-第十二單元綜合測評
- 少兒美術(shù)課件-《我的情緒小怪獸》
- 永續(xù)債計入權(quán)益的必備條件分析
- 預(yù)應(yīng)力鋼絞線張拉伸長量計算程序單端(自動版)
- 2022年一級造價工程師《計價》章節(jié)題及答案
- 基坑監(jiān)測課件ppt版(共155頁)
- Q∕GDW 12075-2020 架空輸電線路防鳥裝置技術(shù)規(guī)范
- 蠕變、應(yīng)力松弛、滯后和內(nèi)耗講解
- 開發(fā)區(qū)開發(fā)管理模式及發(fā)展要素PPT課件
- 急診科科主任述職報告范文
- 基于MATLAB語音信號降噪處理
- 試訓(xùn)運動員協(xié)議書
評論
0/150
提交評論