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

wxml部分
top當(dāng)前離頂部滾動(dòng)的距離
block_ScrollTop是當(dāng)前模塊離頂部的距離,多減60是因?yàn)槲业膶?dǎo)航是懸浮的,會(huì)擋住部分內(nèi)容,自行修改;
specify-style是我自定義選中標(biāo)簽時(shí)的樣式,可自行更改;
<!-- 導(dǎo)航 -->
<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)驗(yàn)</view>
<view bindtap="toblock3" class="{{top>=block3_ScrollTop-60?'specify-style':''}}">項(xiàng)目經(jīng)驗(yàn)</view>
</view>
<!-- 中部內(nèi)容 -->
<view class="body">
<scroll-view class="list" scroll-y="true" style="height:{{winHeight}}">
<view id='block_1'>
<!-- 第一個(gè)板塊 -->
</view>
<view id='block_2'>
<!-- 第二個(gè)板塊 -->
</view>
<view id='block_3'>
<!-- 第三個(gè)板塊 -->
</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中拿到自適應(yīng)winHeight賦值到scroll-view組件;
然后通過createSelectorQuery方法獲取頂部id、板塊一id、板塊二id、板塊三id離頂部的距離;
然后通過onPageScroll方法時(shí)時(shí)監(jiān)聽獲取當(dāng)前位置離頂部滾動(dòng)的距離;
然后通過pageScrollTo實(shí)現(xiàn)點(diǎn)擊跳轉(zhuǎn)定位;
Page({
data: {
//當(dāng)前離頂部滾動(dòng)的距離
top: 0,
},
// 監(jiān)聽滾動(dòng)事件 scrollTop 滾動(dòng)的距離
onPageScroll: function (e) { // 獲取滾動(dòng)條當(dāng)前位置
// 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
})
}
},
//點(diǎn)擊跳轉(zhuǎn)到板塊一
toblock1: function () {
wx.pageScrollTo({
/*
*多減50是因?yàn)槲业膶?dǎo)航是懸浮的,會(huì)擋住部分內(nèi)容
*這里是1等于2rpx
*/
scrollTop: this.data.block1_ScrollTop - 50
})
},
//點(diǎn)擊跳轉(zhuǎn)到板塊二
toblock2: function () {
wx.pageScrollTo({
scrollTop: this.data.block2_ScrollTop - 50
})
},
//點(diǎn)擊跳轉(zhuǎn)到板塊三
toblock3: function () {
wx.pageScrollTo({
scrollTop: this.data.block3_ScrollTop - 50
})
},
onLoad: function (options) {
let that = this
// 高度自適應(yīng)
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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實(shí)現(xiàn)隨機(jī)數(shù)生成器(去重)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)隨機(jī)數(shù)生成器,生成不重復(fù)的隨機(jī)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
JS中把函數(shù)作為另一函數(shù)的參數(shù)傳遞方法(總結(jié))
下面小編就為大家?guī)硪黄狫S中把函數(shù)作為另一函數(shù)的參數(shù)傳遞方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
select下拉框插件jquery.editable-select詳解
本篇文章主要介紹了select下拉框插件jquery.editable-select。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
javascript內(nèi)置對象Date案例總結(jié)分析
今天總結(jié)javascript內(nèi)置對象Date的使用,并且寫一個(gè)重要的網(wǎng)頁倒計(jì)時(shí)的核心算法案例,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
仿谷歌主頁js動(dòng)畫效果實(shí)現(xiàn)代碼
昨天看到谷歌的主頁上出現(xiàn)了幾個(gè)動(dòng)畫,發(fā)現(xiàn)不是flash做的,而是用js+圖片實(shí)現(xiàn)的!今天把拷貝到的圖片,用js實(shí)現(xiàn)了動(dòng)畫效果!2013-07-07

