FXML

优质
小牛编辑
135浏览
2023-12-01

createSelectorQuery

SelectorQuery ft.createSelectorQuery()

返回一个 SelectorQuery 对象实例。在自定义组件或包含自定义组件的页面中,应使用 this.createSelectorQuery() 来代替。

返回值

SelectorQuery

示例代码

const query = ft.createSelectorQuery()
query.select('#the-id').boundingClientRect()
query.selectViewport().scrollOffset()
query.exec(function(res){
  res[0].top       // #the-id节点的上边界坐标
  res[1].scrollTop // 显示区域的竖直滚动位置
})

createIntersectionObserver

IntersectionObserver ft.createIntersectionObserver(Object component, Object options)
创建并返回一个 IntersectionObserver 对象实例。在自定义组件或包含自定义组件的页面中,应使用 this.createIntersectionObserver([options]) 来代替。

参数

Object component

自定义组件实例

Object options

选项

属性类型默认值必填说明最低版本
thresholdsArray.<number>[0]一个数值数组,包含所有阈值。
initialRationumber0初始的相交比例,如果调用时检测到的相交比例与这个值不相等且达到阈值,则会触发一次监听器的回调函数。
observeAllbooleanfalse是否同时观测多个目标节点(而非一个),如果设为 true ,observe 的 targetSelector 将选中多个节点(注意:同时选中过多节点将影响渲染性能)2.0.0

返回值

IntersectionObserver

IntersectionObserver

IntersectionObserver 对象,用于推断某些节点是否可以被用户看见、有多大比例可以被用户看见。

IntersectionObserver.relativeTo

IntersectionObserver IntersectionObserver.relativeTo(string selector, Object margins) 使用选择器指定一个节点,作为参照区域之一。

参数

string selector

选择器

Object margins

用来扩展(或收缩)参照节点布局区域的边界

属性类型默认值必填说明
leftnumber节点布局区域的左边界
rightnumber节点布局区域的右边界
topnumber节点布局区域的上边界
bottomnumber节点布局区域的下边界

返回值

IntersectionObserver

IntersectionObserver.relativeToViewport

IntersectionObserver IntersectionObserver.relativeToViewport(Object margins) 指定页面显示区域作为参照区域之一

参数

Object margins

用来扩展(或收缩)参照节点布局区域的边界

属性类型默认值必填说明
leftnumber节点布局区域的左边界
rightnumber节点布局区域的右边界
topnumber节点布局区域的上边界
bottomnumber节点布局区域的下边界

返回值

IntersectionObserver

示例代码

下面的示例代码中,如果目标节点(用选择器 .target-class 指定)进入显示区域以下 100px 时,就会触发回调函数。

Page({
  onLoad: function(){
    ft.createIntersectionObserver().relativeToViewport({bottom: 100}).observe('.target-class', (res) => {
      res.intersectionRatio // 相交区域占目标节点的布局区域的比例
      res.intersectionRect // 相交区域
      res.intersectionRect.left // 相交区域的左边界坐标
      res.intersectionRect.top // 相交区域的上边界坐标
      res.intersectionRect.width // 相交区域的宽度
      res.intersectionRect.height // 相交区域的高度
    })
  }
})

IntersectionObserver.observe

IntersectionObserver.observe(string targetSelector, IntersectionObserver.observeCallback callback) 指定目标节点并开始监听相交状态变化情况

参数

string targetSelector

选择器

function callback

监听相交状态变化的回调函数

参数

Object res

属性类型说明
idstring节点 ID
datasetRecord.<string, any>节点自定义数据属性
intersectionRationumber相交比例
intersectionRectObject相交区域的边界
boundingClientRectObject目标边界
relativeRectObject参照区域的边界
timenumber相交检测时的时间戳

res.intersectionRect 的结构

属性类型说明
leftnumber左边界
rightnumber右边界
topnumber上边界
bottomnumber下边界
widthnumber宽度
heightnumber高度

res.boundingClientRect 的结构

属性类型说明
leftnumber左边界
rightnumber右边界
topnumber上边界
bottomnumber下边界
widthnumber宽度
heightnumber高度

res.relativeRect 的结构

属性类型说明
leftnumber左边界
rightnumber右边界
topnumber上边界
bottomnumber下边界

IntersectionObserver.disconnect

IntersectionObserver.disconnect() 停止监听。回调函数将不再触发

MediaQueryObserver

MediaQueryObserver.disconnect

MediaQueryObserver.disconnect() 停止监听。回调函数将不再触发

MediaQueryObserver.observe

MediaQueryObserver.observe(Object descriptor, function callback)

开始监听页面 media query 变化情况

参数

Object descriptor

media query 描述符

属性类型默认值必填说明
minWidthnumber页面最小宽度( px 为单位)
maxWidthnumber页面最大宽度( px 为单位)
widthnumber页面宽度( px 为单位)
minHeightnumber页面最小高度( px 为单位)
maxHeightnumber页面最大高度( px 为单位)
heightnumber页面高度( px 为单位)
orientationstring屏幕方向( landscapeportrait

function callback

监听 media query 状态变化的回调函数

参数

Object res

属性类型说明
matchesboolean页面的当前状态是否满足所指定的 media query

NodesRef

用于获取 FXML 节点信息的对象

NodesRef.boundingClientRect

SelectorQuery NodesRef.boundingClientRect(function callback)

添加节点的布局位置的查询请求。相对于显示区域,以像素为单位。其功能类似于 DOM 的 getBoundingClientRect。返回 NodesRef 对应的 SelectorQuery

参数

function callback

回调函数,在执行 SelectorQuery.exec 方法后,节点信息会在 callback 中返回。

参数

Object res

属性类型说明
idstring节点的 ID
datasetObject节点的 dataset
leftnumber节点的左边界坐标
rightnumber节点的右边界坐标
topnumber节点的上边界坐标
bottomnumber节点的下边界坐标
widthnumber节点的宽度
heightnumber节点的高度

返回值

SelectorQuery

示例代码

Page({
  getRect () {
    ft.createSelectorQuery().select('#the-id').boundingClientRect(function(rect){
      rect.id      // 节点的ID
      rect.dataset // 节点的dataset
      rect.left    // 节点的左边界坐标
      rect.right   // 节点的右边界坐标
      rect.top     // 节点的上边界坐标
      rect.bottom  // 节点的下边界坐标
      rect.width   // 节点的宽度
      rect.height  // 节点的高度
    }).exec()
  },
  getAllRects () {
    ft.createSelectorQuery().selectAll('.a-class').boundingClientRect(function(rects){
      rects.forEach(function(rect){
        rect.id      // 节点的ID
        rect.dataset // 节点的dataset
        rect.left    // 节点的左边界坐标
        rect.right   // 节点的右边界坐标
        rect.top     // 节点的上边界坐标
        rect.bottom  // 节点的下边界坐标
        rect.width   // 节点的宽度
        rect.height  // 节点的高度
      })
    }).exec()
  }
})

NodesRef.context

SelectorQuery NodesRef.context(function callback)

添加节点的 Context 对象查询请求。目前支持 VideoContext、CanvasContext、LivePlayerContext、EditorContext和 MapContext 的获取。

参数

function callback

回调函数,在执行 SelectorQuery.exec 方法后,返回节点信息。

参数

Object res

属性类型说明
contextObject节点对应的 Context 对象

返回值

SelectorQuery

示例代码

Page({
  getContext () {
    ft.createSelectorQuery().select('.the-video-class').context(function(res){
      console.log(res.context) // 节点对应的 Context 对象。如:选中的节点是 <video> 组件,那么此处即返回 VideoContext 对象
    }).exec()
  }
})

NodesRef.fields

SelectorQuery NodesRef.fields(Object fields, function callback)

获取节点的相关信息。需要获取的字段在fields中指定。返回值是 nodesRef 对应的 selectorQuery

参数

Object fields

属性类型默认值必填说明最低版本
idbooleanfalse是否返回节点 id
datasetbooleanfalse是否返回节点 dataset
markbooleanfalse是否返回节点 mark
rectbooleanfalse是否返回节点布局位置(left right top bottom
sizebooleanfalse是否返回节点尺寸(width height
scrollOffsetbooleanfalse否 是否返回节点的 scrollLeft scrollTop,节点必须是 scroll-view 或者 viewport
propertiesArray.<string>[]指定属性名列表,返回节点对应属性名的当前属性值(只能获得组件文档中标注的常规属性值,id class style 和事件绑定的属性值不可获取)
computedStyleArray.<string>]指定样式名列表,返回节点对应样式名的当前值[2.1.0
contextbooleanfalse是否返回节点对应的 Context 对象2.4.2
nodebooleanfalse是否返回节点对应的 Node 实例2.7.0

function callback

回调函数

参数

Object res

节点的相关信息

返回值

SelectorQuery

注意

computedStyle 的优先级高于 size,当同时在 computedStyle 里指定了 width/height 和传入了 size: true,则优先返回 computedStyle 获取到的 width/height。

示例代码

Page({
  getFields () {
    ft.createSelectorQuery().select('#the-id').fields({
      dataset: true,
      size: true,
      scrollOffset: true,
      properties: ['scrollX', 'scrollY'],
      computedStyle: ['margin', 'backgroundColor'],
      context: true,
    }, function (res) {
      res.dataset    // 节点的dataset
      res.width      // 节点的宽度
      res.height     // 节点的高度
      res.scrollLeft // 节点的水平滚动位置
      res.scrollTop  // 节点的竖直滚动位置
      res.scrollX    // 节点 scroll-x 属性的当前值
      res.scrollY    // 节点 scroll-y 属性的当前值
      // 此处返回指定要返回的样式名
      res.margin
      res.backgroundColor
      res.context    // 节点对应的 Context 对象
    }).exec()
  }
})

NodesRef.scrollOffset

SelectorQuery NodesRef.scrollOffset(function callback)

添加节点的滚动位置查询请求。以像素为单位。节点必须是 scroll-view 或者 viewport,返回 NodesRef 对应的 SelectorQuery

参数

function callback

回调函数,在执行 SelectorQuery.exec 方法后,节点信息会在 callback 中返回。

参数

Object res

属性类型说明
idstring节点的 ID
datasetObject节点的 dataset
scrollLeftnumber节点的水平滚动位置
scrollTopnumber节点的竖直滚动位置

返回值

SelectorQuery

示例代码

Page({
  getScrollOffset () {
    ft.createSelectorQuery().selectViewport().scrollOffset(function(res){
      res.id      // 节点的ID
      res.dataset // 节点的dataset
      res.scrollLeft // 节点的水平滚动位置
      res.scrollTop  // 节点的竖直滚动位置
    }).exec()
  }
})

SelectorQuery

查询节点信息的对象​

SelectorQuery.exec

NodesRef SelectorQuery.exec(function callback)

执行所有的请求。请求结果按请求次序构成数组,在callback的第一个参数中返回。

参数

function callback

回调函数

返回值

NodesRef

SelectorQuery.in

SelectorQuery SelectorQuery.in(Component component)

将选择器的选取范围更改为自定义组件 component 内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。

参数

Component component

自定义组件实例

返回值

SelectorQuery

示例代码

Component({
  queryMultipleNodes (){
    const query = ft.createSelectorQuery().in(this)
    query.select('#the-id').boundingClientRect(function(res){
      res.top // 这个组件内 #the-id 节点的上边界坐标
    }).exec()
  }
})

SelectorQuery.select

NodesRef SelectorQuery.select(string selector)

在当前页面下选择第一个匹配选择器 selector 的节点。返回一个 NodesRef 对象实例,可以用于获取节点信息。

参数

string selector

选择器

返回值

NodesRef

selector 语法

selector类似于 CSS 的选择器,但仅支持下列语法。

  • ID选择器:#the-id
  • class选择器(可以连续指定多个):.a-class.another-class
  • 子元素选择器:.the-parent > .the-child
  • 后代选择器:.the-ancestor .the-descendant
  • 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant
  • 多选择器的并集:#a-node, .some-other-nodes

SelectorQuery.selectAll

NodesRef SelectorQuery.selectAll(string selector)

在当前页面下选择匹配选择器 selector 的所有节点。

参数

string selector

选择器

返回值

NodesRef

selector 语法

selector类似于 CSS 的选择器,但仅支持下列语法。

  • ID选择器:#the-id
  • class选择器(可以连续指定多个):.a-class.another-class
  • 子元素选择器:.the-parent > .the-child
  • 后代选择器:.the-ancestor .the-descendant
  • 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant
  • 多选择器的并集:#a-node, .some-other-nodes

SelectorQuery.selectViewport

NodesRef SelectorQuery.selectViewport()

选择显示区域。可用于获取显示区域的尺寸、滚动位置等信息。

返回值

NodesRef