UNPKG

tdesign-mobile-vue

Version:
1 lines 5.86 kB
{"version":3,"file":"base.mjs","sources":["../../../../src/_common/js/tabs/base.ts"],"sourcesContent":["const getDomWidth = (dom: HTMLElement): number => dom?.offsetWidth || 0;\nconst getDomOffsetLeft = (dom: HTMLElement): number => dom?.offsetLeft || 0;\n\ntype scrollPosition = 'auto' | 'start' | 'center' | 'end';\n\nexport interface allElementDeps {\n activeTab?: HTMLElement;\n navsContainer?: HTMLElement;\n navsWrap?: HTMLElement;\n leftOperations?: HTMLElement;\n toLeftBtn?: HTMLElement;\n rightOperations?: HTMLElement;\n toRightBtn?: HTMLElement;\n}\n\nexport function calculateOffset(depElement: allElementDeps, offset: number, scrollPosition: scrollPosition): number {\n // 计算当前 activeTab 应该滚动到的位置\n const { navsContainer, activeTab, rightOperations, leftOperations } = depElement;\n const tabWidth = getDomWidth(activeTab);\n const wrapWidth = getDomWidth(navsContainer);\n const tabOffset = getDomOffsetLeft(activeTab);\n const rightOperationsWidth = getDomWidth(rightOperations);\n const leftOperationsWidth = getDomWidth(leftOperations);\n\n if (scrollPosition === 'auto') {\n if (tabOffset - leftOperationsWidth < offset) {\n return tabOffset - leftOperationsWidth;\n } if (tabOffset + tabWidth > offset + wrapWidth - rightOperationsWidth) {\n return tabOffset + tabWidth - wrapWidth + rightOperationsWidth;\n }\n } else if (scrollPosition === 'start') {\n return tabOffset - leftOperationsWidth;\n } else if (scrollPosition === 'center') {\n return tabOffset + (tabWidth - wrapWidth) / 2;\n } else if (scrollPosition === 'end') {\n return tabOffset + tabWidth - wrapWidth + rightOperationsWidth;\n }\n return offset;\n}\n\n/**\n * 计算上一页或下一页偏移量\n * @param elements 计算时依赖的元素\n * @returns number\n */\nexport function calcPrevOrNextOffset(elements: allElementDeps, offset: number, action: 'next' | 'prev'): number {\n const { navsContainer, activeTab } = elements;\n const navsContainerWidth = getDomWidth(navsContainer);\n const activeTabWidth = getDomWidth(activeTab);\n if (action === 'next') {\n return offset + navsContainerWidth - activeTabWidth;\n }\n return offset - navsContainerWidth + activeTabWidth;\n}\n\n/**\n * 计算最大偏移量\n * @param elements 计算时依赖的元素\n * @returns number\n */\nexport function calcMaxOffset(elements: allElementDeps): number {\n const { navsWrap, navsContainer, rightOperations, toRightBtn } = elements;\n const wrapWidth = getDomWidth(navsWrap);\n const containerWidth = getDomWidth(navsContainer);\n const rightOperationsWidth = getDomWidth(rightOperations);\n const toRightBtnWidth = getDomWidth(toRightBtn);\n return wrapWidth - containerWidth + rightOperationsWidth - toRightBtnWidth;\n}\n\n/**\n * 计算合法偏移量\n * @param offset 偏移值\n * @param maxOffset 最大偏移值\n * @returns number\n */\nexport function calcValidOffset(offset: number, maxOffset: number): number {\n return Math.max(0, Math.min(offset, maxOffset));\n}\n"],"names":["getDomWidth","dom","offsetWidth","getDomOffsetLeft","offsetLeft","calculateOffset","depElement","offset","scrollPosition","navsContainer","activeTab","rightOperations","leftOperations","tabWidth","wrapWidth","tabOffset","rightOperationsWidth","leftOperationsWidth","calcPrevOrNextOffset","elements","action","navsContainerWidth","activeTabWidth","calcMaxOffset","navsWrap","toRightBtn","containerWidth","toRightBtnWidth","calcValidOffset","maxOffset","Math","max","min"],"mappings":"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"}