|
|
|
|
// 使用 `export` 关键字将名为 `basic` 的变量作为模块的导出项,以便其他模块可以引入并使用它。
|
|
|
|
|
// `basic` 被赋值为通过 `Behavior` 函数创建的一个行为对象(在微信小程序等框架中,行为可以被组件引入来复用其中的属性、方法等功能)。
|
|
|
|
|
export const basic = Behavior({
|
|
|
|
|
// `methods` 属性用于定义在该行为对象中包含的一系列方法,这些方法可以被使用了这个行为的组件所调用。
|
|
|
|
|
methods: {
|
|
|
|
|
// 定义名为 `$emit` 的方法,其功能是调用 `this.triggerEvent` 方法,并将接收到的所有参数原封不动地传递给 `triggerEvent` 方法。
|
|
|
|
|
// 这里的 `$emit` 可能是仿照一些框架(如 Vue 等)中触发自定义事件的方式来命名,用于在组件内部触发自定义事件,方便组件间通信等操作。
|
|
|
|
|
$emit() {
|
|
|
|
|
this.triggerEvent.apply(this, arguments);
|
|
|
|
|
},
|
|
|
|
|
// 定义名为 `getRect` 的方法,该方法用于获取页面中指定选择器对应的元素的布局信息(边界矩形信息等),返回一个 `Promise` 对象。
|
|
|
|
|
getRect(selector, all) {
|
|
|
|
|
return new Promise(resolve => {
|
|
|
|
|
// 使用微信小程序提供的 `wx.createSelectorQuery` 方法创建一个选择器查询对象,用于在页面中查找元素。
|
|
|
|
|
wx.createSelectorQuery()
|
|
|
|
|
// 通过 `.in(this)` 将选择器查询的作用范围限定在当前组件实例内(如果有组件层级等情况时很有用)。
|
|
|
|
|
// 根据 `all` 参数的值来决定调用 `selectAll` 还是 `select` 方法,`select` 用于获取单个元素,`selectAll` 用于获取所有匹配选择器的元素。
|
|
|
|
|
.in(this)[all?'selectAll' :'select'](selector)
|
|
|
|
|
// 调用 `boundingClientRect` 方法来获取元素的边界矩形信息(如位置、大小等),传入一个回调函数,在获取到信息后进行处理。
|
|
|
|
|
.boundingClientRect(rect => {
|
|
|
|
|
// 如果 `all` 参数为 `true`,并且获取到的 `rect` 是数组且长度大于 0,说明获取到了多个元素的矩形信息,此时通过 `resolve` 方法将 `rect` 数组传递出去,用于后续处理(在 `Promise` 中表示成功获取到了期望的数据)。
|
|
|
|
|
if (all && Array.isArray(rect) && rect.length) {
|
|
|
|
|
resolve(rect);
|
|
|
|
|
}
|
|
|
|
|
// 如果 `all` 参数为 `false`,并且获取到了单个元素的 `rect` 信息(即 `rect` 不为空),同样通过 `resolve` 方法将 `rect` 传递出去,表示成功获取到了单个元素的矩形信息。
|
|
|
|
|
if (!all && rect) {
|
|
|
|
|
resolve(rect);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
// 最后调用 `exec` 方法执行整个查询操作,触发实际的查找和获取元素信息的流程。
|
|
|
|
|
.exec();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|