uniapp獲取節點位於頁面的位置


最近在做一個ipad端的下拉框組件,功能實現並不復雜,難的是如何判斷當下拉框超出可視范圍時的狀態,

當時查了好多資料得出的結論是:

let view = uni.createSelectorQuery().in(this).select('class')
view.fields({
  size: true,//是否返回節點尺寸(width height)
  rect: true,//是否返回節點的 scrollLeft scrollTop,節點必須是 scroll-view 或者 viewport
  scrollOffset: true,//是否返回節點的 scrollLeft scrollTop,節點必須是 scroll-view 或者 viewport
}, (res) => {
  if (res.bottom > 500) {
    let up = this.list.length > 6 ? 6 : this.list.length
    up *= 80
    up += 10
    this.topShowStyle = 'top:-'+up+'upx;'
  }
 }).exec();

可能很多同學都認識:uni.createSelectorQuery().select('class'),但是:uni.createSelectorQuery().in(this).select('class')這個會被忽略掉,
兩者之間的區別:
uni.createSelectorQuery().select('class'):(組件情況下,非組件下沒試過)返回當前節點相對於該節點父元素的位置信息,就是說返回的數據left丶right丶bottom丶top都是相對於父元素的距離,並不是我們想要的相對於頁面的位置
所以正確的方法得加上.in(this)
uni.createSelectorQuery().in(this)官方文檔給出的解釋是:將選擇器的選取范圍更改為自定義組件 component 內,返回一個 SelectorQuery 對象實例。(初始時,選擇器僅選取頁面范圍的節點,不會選取任何自定義組件中的節點)。
因為我做的是組件,所以用uni.createSelectorQuery().select('class')得到的節點是相對於父元素節點的位置,要獲取組件相對於頁面的位置應該用uni.createSelectorQuery().in(this).select('class')

想查看更多節點信息的同學可以去官網查看文檔:https://uniapp.dcloud.io/api/ui/nodes-info?id=createselectorquery


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM