您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了微信小程序如何實(shí)現(xiàn)點(diǎn)擊滾動到指定位置,內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
公司項(xiàng)目要做一個(gè)類似微信通訊錄導(dǎo)航的效果,點(diǎn)擊右側(cè)字母頁面滾動到相應(yīng)位置。
因?yàn)槲⑿判〕绦驔]有dom概念,所以不能使用錨點(diǎn),也不能直接獲取對應(yīng)字母相對頁面的偏移位置。此時(shí)只能使用小程序創(chuàng)建對象實(shí)例的API獲取節(jié)點(diǎn)信息:
let query = wx.createSelectorQuery().in(this); query.selectViewport().scrollOffset() query.select("#Nav").boundingClientRect(); query.select("#FilterNav").boundingClientRect(); query.select("#"+((letter=='#')?'other':letter)).boundingClientRect(); query.exec(function (res) { let scrollTop = 0; if(res[3]){ scrollTop = res[0].scrollTop + res[3].top }else{ scrollTop = res[0].scrollTop; } wx.pageScrollTo({ scrollTop: scrollTop - res[1].height - res[2].height, duration: 300 }); });
解釋一下該代碼的意思:
1.先創(chuàng)建節(jié)點(diǎn)對象,wx.createSelectorQuery()返回一個(gè)對象實(shí)例;
2.選擇顯示區(qū)域;
3.調(diào)用select方法,傳入節(jié)點(diǎn)的id值,可在同一節(jié)點(diǎn)對象進(jìn)行多次調(diào)用,最后會返回?cái)?shù)組結(jié)果(上圖中滾動區(qū)域距離頁面頂部是有兩個(gè)導(dǎo)航欄高度的距離的,所以查詢了兩次導(dǎo)航欄);
4.exec()回調(diào)方法中可以獲取所查詢所有節(jié)點(diǎn)的信息,數(shù)組第一條為頁面的位置信息(滾動距離),獲取到對應(yīng)字母節(jié)點(diǎn)的top值為節(jié)點(diǎn)相對于屏幕頂部的位置
結(jié)果:頁面滾動位置 = 頁面滾動距離 + 字母節(jié)點(diǎn)相對屏幕高度距離 - 頭部導(dǎo)航條高度 - 菜單欄高度
wx.pageScrollTo()調(diào)用API頁面滾動
如果是讓滾動容器滾動到指定位置,計(jì)算位置會有一點(diǎn)不同:
var query = wx.createSelectorQuery().in(this); query.select("#swiper").boundingClientRect(); query.select("#"+ letter).fields({ rect:true,scrollOffset:true }); query.selectViewport().scrollOffset() query.exec((res)=>{ _this.setData({ letterScrolltop: res[1].top - res[0].top }) });
上圖因?yàn)槭菑棾隹蚶锏膬?nèi)容,所以列表放在scroll-view滾動容器中,和上面不一樣的是滾動位置是:滾動容器距離頁面頂部距離 - 錨點(diǎn)距離頁面頂部距離,將計(jì)算后的偏移量修改至對應(yīng)scroll-view容器的scroll-top屬性就行了。
以上就是關(guān)于微信小程序如何實(shí)現(xiàn)點(diǎn)擊滾動到指定位置的內(nèi)容,如果你們有學(xué)習(xí)到知識或者技能,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。