查询节点信息的对象
执行所有的请求,请求结果按请求次序构成数组,在 callback 的第一个参数中返回。
Page({
data: {
metrics: []
},
onReady() {
this.queryNodeInfo();
},
queryNodeInfo() {
const query = xhs.createSelectorQuery();
query.select('.target').boundingClientRect();
query.exec(res => {
console.log('节点信息:', res[0]);
const rect = res[0];
if (rect) {
const metrics = []
for (const key in rect) {
if (key !== 'id' && key !== 'dataset') {
const val = rect[key];
metrics.push({key, val});
}
}
this.setData({metrics});
}
});
}
});
将选择器的选取范围更改为自定义组件 component 内(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)。
// 自定义组件逻辑 (custom.js)
Component({
methods: {
// 不能写在引用自定义组件的页面内
queryMultipleNodes() {
xhs.createSelectorQuery()
.in(this)
.select('.name')
.boundingClientRect(res => {
xhs.showModal({
title: '节点信息为',
content: JSON.stringify(res)
});
}).exec();
}
}
});
在当前页面下选择第一个匹配选择器 selector 的节点,返回一个 NodesRef 对象实例,可以用于获取节点信息。
类似于 CSS 的选择器,但仅支持下列语法。
Page({
data: {
message: ''
},
onReady() {
this.selectorQuery = xhs.createSelectorQuery();
},
queryNodeInfo() {
console.log(this.selectorQuery.select('.target'));
// nodeRef: selector: ".target", queryType: "select"
this.selectorQuery
.select('.target')
.boundingClientRect()
.exec(res => {
console.log('节点信息:', res[0]);
this.setData('message', res[0].top);
});
}
});
在当前页面下选择匹配选择器 selector 的节点,返回一个 NodesRef 对象实例。 与 selectorQuery.select(selector) 不同的是,它选择所有匹配选择器的节点。
Page({
data: {
targetFirst: '',
targetSecond: ''
},
onReady() {
this.queryNodeInfo();
},
queryNodeInfo() {
const selectorQuery = xhs.createSelectorQuery();
selectorQuery.selectAll('.target').boundingClientRect();
selectorQuery.exec(res => {
this.setData('targetFirst', res[0][0].top);
this.setData('targetSecond', res[0][1].top);
});
}
});
选择显示区域,可用于获取显示区域的尺寸、滚动位置等信息,返回一个 NodesRef 对象实例
Page({
selectViewport() {
xhs.createSelectorQuery()
.selectViewport()
.scrollOffset(res => {
console.log('节点信息', res);
// res.id // 节点的ID
// res.dataset // 节点的dataset
// res.scrollLeft // 节点的水平滚动位置
// res.scrollTop // 节点的竖直滚动位置
xhs.showModal({
title: 'title',
content: JSON.stringify(res)
});
}).exec()
}
});