UNPKG

tdesign-mobile-vue

Version:
1 lines 8.73 kB
{"version":3,"file":"dom.mjs","sources":["../../../src/guide/utils/dom.ts"],"sourcesContent":["import { isFunction, isString } from 'lodash-es';\nimport { AttachNode } from '../../common';\nimport { elementInViewport, getWindowScroll, getWindowSize } from '../../shared/dom';\n/**\n * 获取元素某个 css 对应的值\n * @param element 元素\n * @param propName css 名\n * @returns string\n */\nexport function getElmCssPropValue(element: HTMLElement, propName: string): string {\n let propValue = '';\n\n if (document.defaultView && document.defaultView.getComputedStyle) {\n propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName);\n }\n\n if (propValue && propValue.toLowerCase) {\n return propValue.toLowerCase();\n }\n\n return propValue;\n}\n\n/**\n * 判断元素是否处在 position fixed 中\n * @param element 元素\n * @returns boolean\n */\nexport function isFixed(element: HTMLElement): boolean {\n const p = element.parentNode as HTMLElement;\n\n if (!p || p.nodeName === 'HTML') {\n return false;\n }\n\n if (getElmCssPropValue(element, 'position') === 'fixed') {\n return true;\n }\n\n return isFixed(p);\n}\n\n/**\n * 获取元素相对于另一个元素的位置(或者说相对于 body)\n * 感谢 `meouw`: http://stackoverflow.com/a/442474/375966\n */\nexport function getRelativePosition(elm: HTMLElement, relativeElm: HTMLElement = document.body) {\n const { scrollTop, scrollLeft } = getWindowScroll();\n const { top: elmTop, left: elmLeft } = elm.getBoundingClientRect();\n const { top: relElmTop, left: relElmLeft } = relativeElm.getBoundingClientRect();\n const relativeElmPosition = getElmCssPropValue(relativeElm, 'position');\n\n if (\n (relativeElm.tagName.toLowerCase() !== 'body' && relativeElmPosition === 'relative') ||\n relativeElmPosition === 'sticky'\n ) {\n return {\n top: elmTop - relElmTop,\n left: elmLeft - relElmLeft,\n };\n }\n\n if (isFixed(elm)) {\n return {\n top: elmTop,\n left: elmLeft,\n };\n }\n\n return {\n top: elmTop + scrollTop,\n left: elmLeft + scrollLeft,\n };\n}\n\nexport function getTargetElm(elm: AttachNode): HTMLElement {\n if (elm) {\n let targetElement: HTMLElement = null;\n if (isString(elm)) {\n targetElement = document.querySelector(elm);\n } else if (isFunction(elm)) {\n targetElement = elm() as HTMLElement;\n } else {\n throw new Error('elm should be string or function');\n }\n if (targetElement) {\n return targetElement as HTMLElement;\n }\n if (process?.env?.NODE_ENV !== 'test') {\n throw new Error('There is no element with given.');\n }\n } else {\n return document.body;\n }\n}\n\nexport function getScrollParent(element: HTMLElement) {\n let style = window.getComputedStyle(element);\n const excludeStaticParent = style.position === 'absolute';\n const overflowRegex = /(auto|scroll)/;\n\n if (style.position === 'fixed') return document.body;\n\n for (let parent = element; parent.parentElement; ) {\n parent = parent.parentElement;\n style = window.getComputedStyle(parent);\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return document.body;\n}\n\nexport function scrollToParentVisibleArea(element: HTMLElement) {\n const parent = getScrollParent(element);\n if (parent === document.body) return;\n // !todo 逻辑待验证\n if (elementInViewport(element, parent)) return;\n parent.scrollTop = element.offsetTop - parent.offsetTop;\n}\n\nexport function scrollToElm(elm: HTMLElement) {\n const rect = elm.getBoundingClientRect();\n\n if (!elementInViewport(elm)) {\n const winHeight = getWindowSize().height;\n // const top = rect.bottom - (rect.bottom - rect.top);\n window.scrollTo({\n top: rect.top - (winHeight / 2 - rect.height / 2),\n behavior: 'smooth',\n });\n }\n}\n"],"names":["getElmCssPropValue","element","propName","propValue","document","defaultView","getComputedStyle","getPropertyValue","toLowerCase","isFixed","p","parentNode","nodeName","getRelativePosition","elm","relativeElm","arguments","length","undefined","body","_getWindowScroll","getWindowScroll","scrollTop","scrollLeft","_elm$getBoundingClien","getBoundingClientRect","elmTop","top","elmLeft","left","_relativeElm$getBound","relElmTop","relElmLeft","relativeElmPosition","tagName","getTargetElm","_process","targetElement","isString","querySelector","isFunction","Error","process","env","NODE_ENV","getScrollParent","style","window","excludeStaticParent","position","overflowRegex","parent","parentElement","test","overflow","overflowY","overflowX","scrollToParentVisibleArea","elementInViewport","offsetTop","scrollToElm","rect","winHeight","getWindowSize","height","scrollTo","behavior"],"mappings":"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"}