微信小程序API WXML節(jié)點(diǎn)信息

2022-05-09 17:07 更新

wx.createSelectorQuery()

基礎(chǔ)庫 1.4.0 開始支持,低版本需做兼容處理

返回一個(gè)SelectorQuery對(duì)象實(shí)例??梢栽谶@個(gè)實(shí)例上使用select等方法選擇節(jié)點(diǎn),并使用boundingClientRect等方法選擇需要查詢的信息。

示例代碼:

Page({
  queryMultipleNodes: function(){
    var query = wx.createSelectorQuery()
    query.select('#the-id').boundingClientRect()
    query.selectViewport().scrollOffset()
    query.exec(function(res){
      res[0].top       // #the-id節(jié)點(diǎn)的上邊界坐標(biāo)
      res[1].scrollTop // 顯示區(qū)域的豎直滾動(dòng)位置
    })
  }
})

selectorQuery

selectorQuery 對(duì)象的方法列表:

方法參數(shù)說明
selectselector參考下面詳細(xì)介紹
selectAllselector參考下面詳細(xì)介紹
selectViewport 參考下面詳細(xì)介紹
exec[callback]參考下面詳細(xì)介紹

selectorQuery.select(selector)

在當(dāng)前頁面下選擇第一個(gè)匹配選擇器selector的節(jié)點(diǎn),返回一個(gè)NodesRef對(duì)象實(shí)例,可以用于獲取節(jié)點(diǎn)信息。

selector類似于CSS的選擇器,但僅支持下列語法。

  • ID選擇器:#the-id
  • class選擇器(可以連續(xù)指定多個(gè)):.a-class.another-class
  • 子元素選擇器:.the-parent > #the-child.a-class
  • 多選擇器的并集:#a-node, .some-other-nodes

selectorQuery.selectAll(selector)

在當(dāng)前頁面下選擇匹配選擇器selector的節(jié)點(diǎn),返回一個(gè)NodesRef對(duì)象實(shí)例。 與selectorQuery.selectNode(selector)不同的是,它選擇所有匹配選擇器的節(jié)點(diǎn)。

selectorQuery.selectViewport()

選擇顯示區(qū)域,可用于獲取顯示區(qū)域的尺寸、滾動(dòng)位置等信息,返回一個(gè)NodesRef對(duì)象實(shí)例。

nodesRef.boundingClientRect([callback])

添加節(jié)點(diǎn)的布局位置的查詢請(qǐng)求,相對(duì)于顯示區(qū)域,以像素為單位。其功能類似于DOM的getBoundingClientRect。返回值是nodesRef對(duì)應(yīng)的selectorQuery。

返回的節(jié)點(diǎn)信息中,每個(gè)節(jié)點(diǎn)的位置用leftright、top、bottom、widthheight字段描述。如果提供了callback回調(diào)函數(shù),在執(zhí)行selectQuery的exec方法后,節(jié)點(diǎn)信息會(huì)在callback中返回。

示例代碼:

Page({
  getRect: function(){
    wx.createSelectorQuery().select('#the-id').boundingClientRect(function(rect){
      rect.id      // 節(jié)點(diǎn)的ID
      rect.dataset // 節(jié)點(diǎn)的dataset
      rect.left    // 節(jié)點(diǎn)的左邊界坐標(biāo)
      rect.right   // 節(jié)點(diǎn)的右邊界坐標(biāo)
      rect.top     // 節(jié)點(diǎn)的上邊界坐標(biāo)
      rect.bottom  // 節(jié)點(diǎn)的下邊界坐標(biāo)
      rect.width   // 節(jié)點(diǎn)的寬度
      rect.height  // 節(jié)點(diǎn)的高度
    }).exec()
  },
  getAllRects: function(){
    wx.createSelectorQuery().selectAll('.a-class').boundingClientRect(function(rects){
      rects.forEach(function(rect){
        rect.id      // 節(jié)點(diǎn)的ID
        rect.dataset // 節(jié)點(diǎn)的dataset
        rect.left    // 節(jié)點(diǎn)的左邊界坐標(biāo)
        rect.right   // 節(jié)點(diǎn)的右邊界坐標(biāo)
        rect.top     // 節(jié)點(diǎn)的上邊界坐標(biāo)
        rect.bottom  // 節(jié)點(diǎn)的下邊界坐標(biāo)
        rect.width   // 節(jié)點(diǎn)的寬度
        rect.height  // 節(jié)點(diǎn)的高度
      })
    }).exec()
  }
})

nodesRef.scrollOffset([callback])

添加節(jié)點(diǎn)的滾動(dòng)位置查詢請(qǐng)求,以像素為單位。節(jié)點(diǎn)必須是scroll-view或者viewport。返回值是nodesRef對(duì)應(yīng)的selectorQuery。

返回的節(jié)點(diǎn)信息中,每個(gè)節(jié)點(diǎn)的滾動(dòng)位置用scrollLeft、scrollHeight字段描述。如果提供了callback回調(diào)函數(shù),在執(zhí)行selectQuery的exec方法后,節(jié)點(diǎn)信息會(huì)在callback中返回。

示例代碼:

Page({
  getScrollOffset: function(){
    wx.createSelectorQuery().selectViewport().scrollOffset(function(res){
      res.id      // 節(jié)點(diǎn)的ID
      res.dataset // 節(jié)點(diǎn)的dataset
      res.scrollLeft // 節(jié)點(diǎn)的水平滾動(dòng)位置
      res.scrollTop  // 節(jié)點(diǎn)的豎直滾動(dòng)位置
    }).exec()
  }
})

nodesRef.fields(fields, [callback])

獲取節(jié)點(diǎn)的相關(guān)信息,需要獲取的字段在fields中指定。返回值是nodesRef對(duì)應(yīng)的selectorQuery??芍付ǐ@取的字段包括:

字段名默認(rèn)值說明
id是否返回節(jié)點(diǎn)id
dataset是否返回節(jié)點(diǎn)dataset
rect是否返回節(jié)點(diǎn)布局位置(left right top bottom
size是否返回節(jié)點(diǎn)尺寸(width height
scrollOffset是否返回節(jié)點(diǎn)的 scrollLeft scrollTop ,節(jié)點(diǎn)必須是scroll-view或者viewport
properties[]指定屬性名列表,返回節(jié)點(diǎn)對(duì)應(yīng)屬性名的當(dāng)前屬性值(只能獲得組件文檔中標(biāo)注的常規(guī)屬性值, id class style 和事件綁定的屬性值不可獲取)

示例代碼:

Page({
  getFields: function(){
    wx.createSelectorQuery().select('#the-id').fields({
      dataset: true,
      size: true,
      scrollOffset: true,
      properties: ['scrollX', 'scrollY']
    }, function(res){
      res.dataset    // 節(jié)點(diǎn)的dataset
      res.width      // 節(jié)點(diǎn)的寬度
      res.height     // 節(jié)點(diǎn)的高度
      res.scrollLeft // 節(jié)點(diǎn)的水平滾動(dòng)位置
      res.scrollTop  // 節(jié)點(diǎn)的豎直滾動(dòng)位置
      res.scrollX    // 節(jié)點(diǎn) scroll-x 屬性的當(dāng)前值
      res.scrollY    // 節(jié)點(diǎn) scroll-x 屬性的當(dāng)前值
    }).exec()
  }
})

selectorQuery.exec([callback])

執(zhí)行所有的請(qǐng)求,請(qǐng)求結(jié)果按請(qǐng)求次序構(gòu)成數(shù)組,在callback的第一個(gè)參數(shù)中返回。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)