appointments.js
1 year ago
attendees.js
1 year ago
colorManipulation.js
3 years ago
customer.js
1 year ago
date.js
1 year ago
defaultCustomize.js
1 year ago
employee.js
1 year ago
events.js
1 year ago
formFieldsTemplates.js
3 years ago
formatting.js
1 year ago
helper.js
1 year ago
image.js
1 year ago
integrationApple.js
1 year ago
integrationGoogle.js
1 year ago
integrationOutlook.js
1 year ago
integrationStripe.js
1 year ago
integrationZoom.js
1 year ago
licence.js
2 years ago
objectAndArrayManipulation.js
3 years ago
pricing.js
1 year ago
recurring.js
1 year ago
responsive.js
1 year ago
scrollElements.js
4 years ago
settings.js
1 year ago
translationsElementPlus.js
1 year ago
scrollElements.js
37 lines
| 1 | |
| 2 | function useScrollTo(elementContainer, elem, fromTop, duration, nested = { |
| 3 | inCollapse: false, |
| 4 | }) { |
| 5 | let start = elementContainer.scrollTop, |
| 6 | containerTop = elementContainer.offsetTop, |
| 7 | to = elem.offsetTop, |
| 8 | change = to - (start + containerTop + fromTop), |
| 9 | currentTime = 0, |
| 10 | increment = 20; |
| 11 | |
| 12 | if (nested.inCollapse) { |
| 13 | change = (to + elem.offsetParent.offsetTop + elem.offsetParent.offsetParent.offsetTop + elem.offsetParent.offsetParent.offsetParent.offsetTop) - (start + containerTop + fromTop) |
| 14 | } |
| 15 | |
| 16 | let animateScroll = function(){ |
| 17 | currentTime += increment; |
| 18 | elementContainer.scrollTop = Math.easeInOutQuad(currentTime, start, change, duration); |
| 19 | if(currentTime < duration) { |
| 20 | setTimeout(animateScroll, increment); |
| 21 | } |
| 22 | }; |
| 23 | animateScroll(); |
| 24 | } |
| 25 | |
| 26 | //t = current time |
| 27 | //b = start value |
| 28 | //c = change in value |
| 29 | //d = duration |
| 30 | Math.easeInOutQuad = function (t, b, c, d) { |
| 31 | t /= d/2; |
| 32 | if (t < 1) return c/2*t*t + b; |
| 33 | t--; |
| 34 | return -c/2 * (t*(t-2) - 1) + b; |
| 35 | }; |
| 36 | |
| 37 | export { useScrollTo } |