微信小程序?qū)崿F(xiàn)點擊導航標簽滾動定位到對應位置
本文要實現(xiàn)的是點擊標簽滾動定位到對應位置,且給在當前板塊范圍指定的導航標簽添加樣式
效果的話看下面GIF

wxml部分
top當前離頂部滾動的距離
block_ScrollTop是當前模塊離頂部的距離,多減60是因為我的導航是懸浮的,會擋住部分內(nèi)容,自行修改;
specify-style是我自定義選中標簽時的樣式,可自行更改;
<!-- 導航 -->
<view class='nav' id="tab-con">
<view class='resume-title'>偉安的簡歷</view>
<view bindtap="toblock1" class="{{top<block2_ScrollTop-60?'specify-style':''}}">關(guān)于我</view>
<view bindtap="toblock2" class="{{top>=block2_ScrollTop-60&&top<block3_ScrollTop-60?'specify-style':''}}">工作經(jīng)驗</view>
<view bindtap="toblock3" class="{{top>=block3_ScrollTop-60?'specify-style':''}}">項目經(jīng)驗</view>
</view>
<!-- 中部內(nèi)容 -->
<view class="body">
<scroll-view class="list" scroll-y="true" style="height:{{winHeight}}">
<view id='block_1'>
<!-- 第一個板塊 -->
</view>
<view id='block_2'>
<!-- 第二個板塊 -->
</view>
<view id='block_3'>
<!-- 第三個板塊 -->
</view>
<view id='block_3'>
<!-- 嗯,高度不夠湊數(shù)的 -->
</view>
</scroll-view>
</view>
wxss選中的字體加粗以及底部三角形樣式參考
用了偽類::before畫了三角形,板塊沒有內(nèi)容所以加了高度。
.nav {
display: flex;
justify-content: space-around;
align-items: center;
height: 100rpx;
background-color: rgba(0, 0, 0, 0.2);
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 9999;
}
.specify-style {
font-weight: 800;
position: relative;
}
.specify-style::before {
content: '';
border: solid transparent;
border-width: 0px 14rpx 14rpx 14rpx;
border-bottom-color: snow;
position: absolute;
z-index: 1000;
margin-top: 36rpx;
left: 37%;
}
#block_1,
#block_2,
#block_3 {
height: 70vh;
}
#block_1 {
background-color: aqua;
}
#block_2 {
background-color: bisque;
}
#block_3 {
background-color: cadetblue;
}
js部分
先是在onLoad中拿到自適應winHeight賦值到scroll-view組件;
然后通過createSelectorQuery方法獲取頂部id、板塊一id、板塊二id、板塊三id離頂部的距離;
然后通過onPageScroll方法時時監(jiān)聽獲取當前位置離頂部滾動的距離;
然后通過pageScrollTo實現(xiàn)點擊跳轉(zhuǎn)定位;
Page({
data: {
//當前離頂部滾動的距離
top: 0,
},
// 監(jiān)聽滾動事件 scrollTop 滾動的距離
onPageScroll: function (e) { // 獲取滾動條當前位置
// console.log(e)
this.setData({
top: e.scrollTop
})
if (e.scrollTop > this.data.tabScrollTop) {
this.setData({
tabFixed: true
})
// console.log("我鎖定了")
} else {
this.setData({
tabFixed: false
})
}
},
//點擊跳轉(zhuǎn)到板塊一
toblock1: function () {
wx.pageScrollTo({
/*
*多減50是因為我的導航是懸浮的,會擋住部分內(nèi)容
*這里是1等于2rpx
*/
scrollTop: this.data.block1_ScrollTop - 50
})
},
//點擊跳轉(zhuǎn)到板塊二
toblock2: function () {
wx.pageScrollTo({
scrollTop: this.data.block2_ScrollTop - 50
})
},
//點擊跳轉(zhuǎn)到板塊三
toblock3: function () {
wx.pageScrollTo({
scrollTop: this.data.block3_ScrollTop - 50
})
},
onLoad: function (options) {
let that = this
// 高度自適應
wx.getSystemInfo({
success: function (res) {
var clientHeight = res.windowHeight,
clientWidth = res.windowWidth,
rpxR = 750 / clientWidth;
var calc = clientHeight * rpxR;
that.setData({
winHeight: calc
});
}
});
var query = wx.createSelectorQuery()
//獲取頂部的距離
query.select('#tab-con').boundingClientRect(function (res) {
var top = res.top;
if (top == null) {
var top = 0;
}
that.setData({
tabScrollTop: top
})
}).exec()
//獲取板塊一離頂部的距離
query.select('#block_1').boundingClientRect(function (res) {
that.setData({
block_1ScrollTop: res.top
})
}).exec()
//獲取板塊二離頂部的距離
query.select('#block_2').boundingClientRect(function (res) {
that.setData({
block2_ScrollTop: res.top
})
}).exec()
//獲取板塊三離頂部的距離
query.select('#block_3').boundingClientRect(function (res) {
that.setData({
block3_ScrollTop: res.top
})
}).exec()
},
})
為大家推薦現(xiàn)在關(guān)注度比較高的微信小程序教程一篇:《微信小程序開發(fā)教程》小編為大家精心整理的,希望喜歡。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實現(xiàn)隨機數(shù)生成器(去重)
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)隨機數(shù)生成器,生成不重復的隨機數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
JS中把函數(shù)作為另一函數(shù)的參數(shù)傳遞方法(總結(jié))
下面小編就為大家?guī)硪黄狫S中把函數(shù)作為另一函數(shù)的參數(shù)傳遞方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
select下拉框插件jquery.editable-select詳解
本篇文章主要介紹了select下拉框插件jquery.editable-select。具有很好的參考價值,下面跟著小編一起來看下吧2017-01-01
javascript內(nèi)置對象Date案例總結(jié)分析
今天總結(jié)javascript內(nèi)置對象Date的使用,并且寫一個重要的網(wǎng)頁倒計時的核心算法案例,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步2022-03-03

