vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 2.83 kB
Source Map (JSON)
{"version":3,"file":"scroll-to-element.mjs","sources":["../../../../src/utils/scroll-to-element.ts"],"sourcesContent":["const getTopCoordinate = (element: HTMLElement) => element.offsetTop\nconst getBottomCoordinate = (element: HTMLElement) => element.offsetTop + element.offsetHeight\nconst getCenterCoordinate = (element: HTMLElement) => element.offsetTop + element.offsetHeight / 2\n\nconst getScrollTop = (element: HTMLElement, scrollTarget: HTMLElement, verticalAlignment?: 'start' | 'end' | 'center' | 'any') => {\n const viewHeight = scrollTarget.offsetHeight\n const currentPosition = scrollTarget.scrollTop\n const top = getTopCoordinate(element) - scrollTarget.offsetTop\n const center = getCenterCoordinate(element) - scrollTarget.offsetTop\n const bottom = getBottomCoordinate(element) - scrollTarget.offsetTop\n\n if (verticalAlignment === 'start') {\n return top\n }\n\n if (verticalAlignment === 'end') {\n return bottom - viewHeight\n }\n\n if (verticalAlignment === 'center') {\n return center - viewHeight / 2\n }\n\n if (verticalAlignment === 'any') {\n if (top - currentPosition < 0) {\n return top\n }\n\n if (bottom - currentPosition > viewHeight) {\n return bottom - viewHeight\n }\n }\n}\n\n/**\n * @param options.scrollTarget - element that will be scrolled\n */\nexport const scrollToElement = (element: HTMLElement, options: {\n scrollTarget?: HTMLElement,\n verticalAlignment?: 'start' | 'end' | 'center' | 'any',\n smooth?: boolean,\n} = {\n scrollTarget: element.parentElement!,\n verticalAlignment: 'any',\n smooth: false,\n}) => {\n const scrollTarget = options.scrollTarget || element.parentElement!\n\n const top = getScrollTop(element, scrollTarget, options.verticalAlignment)\n\n if (top === undefined) { return }\n\n scrollTarget.scroll({\n top: top,\n behavior: options.smooth ? 'smooth' : 'auto',\n })\n}\n"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,CAAC,YAAyB,QAAQ;AAC3D,MAAM,sBAAsB,CAAC,YAAyB,QAAQ,YAAY,QAAQ;AAClF,MAAM,sBAAsB,CAAC,YAAyB,QAAQ,YAAY,QAAQ,eAAe;AAEjG,MAAM,eAAe,CAAC,SAAsB,cAA2B,sBAA2D;AAChI,QAAM,aAAa,aAAa;AAChC,QAAM,kBAAkB,aAAa;AACrC,QAAM,MAAM,iBAAiB,OAAO,IAAI,aAAa;AACrD,QAAM,SAAS,oBAAoB,OAAO,IAAI,aAAa;AAC3D,QAAM,SAAS,oBAAoB,OAAO,IAAI,aAAa;AAE3D,MAAI,sBAAsB,SAAS;AAC1B,WAAA;AAAA,EACT;AAEA,MAAI,sBAAsB,OAAO;AAC/B,WAAO,SAAS;AAAA,EAClB;AAEA,MAAI,sBAAsB,UAAU;AAClC,WAAO,SAAS,aAAa;AAAA,EAC/B;AAEA,MAAI,sBAAsB,OAAO;AAC3B,QAAA,MAAM,kBAAkB,GAAG;AACtB,aAAA;AAAA,IACT;AAEI,QAAA,SAAS,kBAAkB,YAAY;AACzC,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;AAKa,MAAA,kBAAkB,CAAC,SAAsB,UAIlD;AAAA,EACF,cAAc,QAAQ;AAAA,EACtB,mBAAmB;AAAA,EACnB,QAAQ;AACV,MAAM;AACE,QAAA,eAAe,QAAQ,gBAAgB,QAAQ;AAErD,QAAM,MAAM,aAAa,SAAS,cAAc,QAAQ,iBAAiB;AAEzE,MAAI,QAAQ,QAAW;AAAE;AAAA,EAAO;AAEhC,eAAa,OAAO;AAAA,IAClB;AAAA,IACA,UAAU,QAAQ,SAAS,WAAW;AAAA,EAAA,CACvC;AACH;"}