Слияние кода завершено, страница обновится автоматически
import { MousePosition } from '../modal-manager';
let zoom = 0;
export function getDocument(self: Window): Document {
try {
const { parent, top } = self;
if (parent !== top) {
return getDocument(parent);
}
return parent.document;
} catch (e) {
return self.document;
}
}
export function getDocuments(self: Window, list: Document[] = []): Document[] {
try {
const { parent, top } = self;
if (parent !== top) {
return getDocuments(parent, list);
}
return list.concat(parent.document);
} catch (e) {
return list.concat(self.document);
}
}
export function findIFrame(self: Window): HTMLIFrameElement | undefined {
return [...self.parent.document.querySelectorAll('iframe')].find(frame => frame.contentWindow === self);
}
export { MousePosition };
function getPageMousePosition(x, y, self: Window, client?: boolean): MousePosition {
const { scrollTop, scrollLeft, clientWidth, clientHeight } = self.document.documentElement;
if (client) {
return { x, y, vw: clientWidth, vh: clientHeight };
}
return { x: x + scrollLeft, y: y + scrollTop, vw: clientWidth, vh: clientHeight };
}
export function getMousePosition(x: number, y: number, self: Window, client?: boolean): MousePosition {
try {
if (self.top === self) {
return getPageMousePosition(x, y, self, client);
}
const { parent } = self;
const iframe = findIFrame(self);
const { top, left } = iframe ? iframe.getBoundingClientRect() : { top: 0, left: 0 };
const newX = x + left;
const newY = y + top;
if (parent === self.top) {
return getPageMousePosition(newX, newY, parent, client);
}
return getMousePosition(newX, newY, parent);
} catch (e) {
return getPageMousePosition(x, y, self, client);
}
}
/**
* 转换缩放比例后的数据
* 场景:兼容全局带有 zoom 样式导致的数据偏差
* @param data 需要转换的数据
* @returns 转换后的数据
*/
export const transformZoomData = (data: number): number => {
if (!zoom) {
// eslint-disable-next-line dot-notation
zoom = Number(getComputedStyle(document.body)['zoom']) || 1;
}
return data / zoom;
};
export default {
getDocument,
getDocuments,
findIFrame,
getMousePosition,
transformZoomData,
};
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )