You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
3.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 使用 `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();
});
}
}
});