UNPKG

tdesign-mobile-vue

Version:
1 lines 6.12 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 /**\n * 计算当前 activeTab 与 navsContainer 的宽度差,\n * 注意 activeTab 的宽度可能大于 navsContainer 的宽度,\n * 所以需要取绝对值\n */\n const diffWidth = Math.abs(navsContainerWidth - activeTabWidth);\n if (action === 'next') {\n return offset + diffWidth;\n }\n return offset - diffWidth;\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","diffWidth","Math","abs","calcMaxOffset","navsWrap","toRightBtn","containerWidth","toRightBtnWidth","calcValidOffset","maxOffset","max","min"],"mappings":"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"}