這兩天UI提了一種交互效果,希望頁面滾動到某個位置的時候讓一個按鈕fix住,而這個位置時不定高度的,這個位置會根據當前頁面的內容多少而動態改變(簡而言之就是 height:auto)
廢話不多說,直接擼代碼
- 在Page的onReady回調里獲取特定元素的高度
這里用到了小程序api-wx.createSelectorQuery(),指定ID元素的詳細屬性會在rect的回調里返回
onReady () {
setTimeout(() => {
const _this = this
wx.createSelectorQuery().select('#YOUR_ELEMEMT_ID')
.boundingClientRect(function (rect) {
console.log(rect)
_this.setData({
top: rect.top
})
}).exec()
}, 300)
}
- 有人可能會問上面代碼的定時器是干嘛的,不是已經在頁面渲染完成OnReady回調里了嗎?
- 事實上,這里可能是小程序的bug,如果不加定時器,獲取的元素高度還是沒渲染完異步數據前的高度
- 當獲取到高度后就可以實現滾動到某個位置進行fixed的操作了
onPageScroll (e) {
if (this.data.top <= e.scrollTop) {
this.setData({
fixed: true
})
} else {
this.setData({
fixed: false
})
}
}
<!-- 這里是粗略的頁面和樣式-->
<view class="{{fixed?'fixed':''}}" id="YOUR_ELEMENT_ID">
在這里固定住
</view>
.fixed{
position:fixed;
}
- 寫在最后的話:
- 如果有更好的解決方案請在下方留言
- 轉載請注明出處