微信小程序?qū)崿F(xiàn)點(diǎn)擊導(dǎo)航標(biāo)簽滾動(dòng)定位到對(duì)應(yīng)位置
本文要實(shí)現(xiàn)的是點(diǎn)擊標(biāo)簽滾動(dòng)定位到對(duì)應(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript模版引擎-tmpl的bug修復(fù)與性能優(yōu)化分析
在平時(shí)編碼中,經(jīng)常要做拼接字符串的工作,如把json數(shù)據(jù)用HTML展示出來,以往字符串拼接與邏輯混在在一起會(huì)讓代碼晦澀不堪,加大了多人協(xié)作與維護(hù)的成本。而采用前端模板機(jī)制就能很好的解決這個(gè)問題2011-10-10JS?new操作原理及手寫函數(shù)模擬實(shí)現(xiàn)示例
這篇文章主要為大家介紹了JS?new操作原理及手寫函數(shù)模擬實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07javascript中的后退和刷新實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨avascript中的后退和刷新實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11javascript經(jīng)典特效分享 手風(fēng)琴、輪播圖、圖片滑動(dòng)
這篇文章主要介紹了javascript經(jīng)典特效,手風(fēng)琴、輪播圖、圖片滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09再也不怕 JavaScript 報(bào)錯(cuò)了,怎么看怎么處理都在這兒
這篇文章主要介紹了再也不怕 JavaScript 報(bào)錯(cuò)了,怎么看怎么處理都在這兒,需要的朋友可以參考下2020-12-12微信小程序性能優(yōu)化之checkSession的使用
這篇文章主要介紹了微信小程序性能優(yōu)化之checkSession的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03JS去除字符串最后的逗號(hào)實(shí)例分析【四種方法】
這篇文章主要介紹了JS去除字符串最后的逗號(hào),結(jié)合實(shí)例形式分析了四種字符串遍歷、截取的操作方法,需要的朋友可以參考下2019-06-06