gtht-miniapp-sdk
Version:
gtht-miniapp-sdk 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库
87 lines (86 loc) • 2.34 kB
JavaScript
/**
* uni boundingClientRect的 Promise 版本
* @param selector 组件选择器
* @param instance 父组件实例
* @returns Promise<NodeRect>
*/
export function getBoundingClientRect(selector, instance) {
return new Promise((resolve) => {
let selectorQuery = uni.createSelectorQuery();
// #ifndef MP-ALIPAY
const proxy = instance?.proxy;
if (proxy) {
selectorQuery = selectorQuery.in(proxy);
}
// #endif
selectorQuery
.select(selector)
.boundingClientRect((data) => {
resolve(data);
})
.exec();
});
}
/**
* 获取可使用窗口尺寸
*/
export function getWindowInfo() {
if (uni.getWindowInfo) {
return uni.getWindowInfo();
}
const info = uni.getSystemInfoSync();
return {
pixelRatio: info.pixelRatio,
screenWidth: info.screenWidth,
screenHeight: info.screenHeight,
windowWidth: info.windowWidth,
windowHeight: info.windowHeight,
statusBarHeight: info.statusBarHeight || 0,
windowTop: info.windowTop || 0,
windowBottom: info.windowBottom || 0,
safeArea: info.safeArea,
safeAreaInsets: info.safeAreaInsets,
screenTop: 0,
};
}
/**
* 获取可使用窗口尺寸、滚动信息
*/
export function getViewportScrollInfo() {
return new Promise((resolve) => {
uni
.createSelectorQuery()
.selectViewport()
.scrollOffset((res) => {
resolve(res);
})
.exec();
});
}
export function toTouchEvent(event, windowTop = 0) {
if (!('touches' in event)) {
const touches = [
{
clientX: event.clientX,
clientY: event.clientY - windowTop,
pageY: event.pageY,
pageX: event.pageX,
},
];
event.changedTouches = touches;
event.touches = event.type === 'mouseup' ? [] : touches;
}
return event;
}
export function getNode(selector, instance) {
return new Promise((resolve) => {
uni
.createSelectorQuery()
.in(instance?.proxy)
.select(selector)
.node((res) => {
resolve(res?.node);
})
.exec();
});
}