版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】小程序如何實(shí)現(xiàn)列表滾動(dòng)上下聯(lián)動(dòng)效果
這篇文章主要為大家展示了“小程序如何實(shí)現(xiàn)列表滾動(dòng)上下聯(lián)動(dòng)效果”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓在下帶領(lǐng)大家一起研究并學(xué)習(xí)一下“小程序如何實(shí)現(xiàn)列表滾動(dòng)上下聯(lián)動(dòng)效果”這篇文章吧。最近在做公司的一款小程序,其中有一塊的設(shè)計(jì)的是在列表做上下滾動(dòng)的是時(shí)候,頂部的tab欄跟著一起聯(lián)動(dòng),當(dāng)點(diǎn)擊tab欄的時(shí)候,列表數(shù)據(jù)也跟隨聯(lián)動(dòng)。頂部的頭部區(qū)域不跟隨列表滾動(dòng);
頭部區(qū)域以下屬于滾動(dòng)區(qū)域。2.1原理介紹這個(gè)地方的實(shí)現(xiàn)主要借助了微信小程序原生的scroll-view組件。使用它的scroll-into-view屬性,可以實(shí)現(xiàn)點(diǎn)擊頂部的tab欄,將頁面滾動(dòng)到指定的列表位置;使用bindscroll事件,可以知道當(dāng)前頁面滾動(dòng)的距離,根據(jù)滾動(dòng)的距離做tab欄的切換操作;2.1頁面布局代碼先說下界面的整體布局,主要分為兩部分,頭部固定區(qū)域+可滾動(dòng)列表區(qū)域??蓾L動(dòng)的列表區(qū)域的標(biāo)題欄當(dāng)滾動(dòng)一定的距離后,它也要固定在頂部。代碼實(shí)現(xiàn):<!--index.wxml-->
<view
class="list">
<!--頂部固定區(qū)域-->
<view
style="height:
88rpx;width:
100%;background-color:
burlywood;text-align:
center;">頭部區(qū)域</view>
<!--可滾動(dòng)區(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}}">
<!--水平滾動(dòng)的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>在布局代碼中有幾個(gè)點(diǎn)需要注意:1、scrollAreaHeight滾動(dòng)區(qū)域的高度計(jì)算。通過獲取當(dāng)前設(shè)備的窗口高度減去頂部固定區(qū)域的高度2、水平tab欄是否置頂。根據(jù)頁面的滾動(dòng)距離來判斷,如果滾動(dòng)距離大于或者等于水平tab欄的高度,則置頂;3、設(shè)置數(shù)據(jù)列表的id="v_{{index}}"id,后續(xù)點(diǎn)擊tab欄滾動(dòng)到指定的位置就是根據(jù)這個(gè)id去實(shí)現(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滾動(dòng)過程中距離頂部的高度
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)
{
//頁面向上滑動(dòng)
//列表當(dāng)前可視區(qū)域最底部到頂部的距離
超過
當(dāng)前列表選中項(xiàng)距頂部的高度(且沒有下標(biāo)越界),則更新tab欄
if
(current
+
1
<
this.heightArr.length
&&
scrollTop
>=
this.heightArr[current])
{
this.setData({
curSelectTab:
current
+
1
})
}
}
else
{
//頁面向下滑動(dòng)
//如果列表當(dāng)前可視區(qū)域最頂部到頂部的距離
小于
當(dāng)前列表選中的項(xiàng)距頂部的高度,則切換tab欄的選中項(xiàng)
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物店衛(wèi)生消毒規(guī)范
- 汽車維修店前臺工作見聞
- 2025年相似三角形教案制作技巧與策略分享
- 銷售管理高效溝通培訓(xùn)
- 銷售競爭策略總結(jié)
- 歐美近現(xiàn)代建筑總結(jié)
- 道路系統(tǒng)規(guī)劃
- 北京干部教育網(wǎng)在線學(xué)習(xí)流程
- 安全生產(chǎn)保障措施方案
- 2025年度砂石材料采購及供應(yīng)鏈金融合同3篇
- 少兒財(cái)商教育(少兒篇)(課堂PPT)
- 洗滌劑常用原料
- 《報(bào)任安書》優(yōu)秀-課件
- 曼陀羅中毒課件
- (新版)焊工(初級)理論知識考試200題及答案
- 滿堂腳手架計(jì)算書
- MRAS系統(tǒng)標(biāo)準(zhǔn)用戶手冊
- HAPS系統(tǒng)實(shí)現(xiàn)協(xié)同仿真驗(yàn)證-基礎(chǔ)電子
- 歐洲地下車庫誘導(dǎo)通風(fēng)系統(tǒng)設(shè)計(jì)手冊
- 現(xiàn)代文答題技巧課件2023年中考語文二輪復(fù)習(xí)
- YS/T 673-2013還原鈷粉
評論
0/150
提交評論