mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 21:29:38 +02:00
* feat: preserve scroll and scroll on connect, better responsive mobile settings menu * Update app/javascript/controllers/scroll_on_connect_controller.js Signed-off-by: Zach Gollwitzer <zach.gollwitzer@gmail.com> * Update app/javascript/controllers/scroll_on_connect_controller.js Signed-off-by: Zach Gollwitzer <zach.gollwitzer@gmail.com> --------- Signed-off-by: Zach Gollwitzer <zach.gollwitzer@gmail.com> Co-authored-by: Zach Gollwitzer <zach.gollwitzer@gmail.com>
41 lines
No EOL
1.2 KiB
JavaScript
41 lines
No EOL
1.2 KiB
JavaScript
import { Controller } from "@hotwired/stimulus"
|
|
|
|
export default class extends Controller {
|
|
static values = {
|
|
selector: { type: String, default: "[aria-current=\"page\"]" },
|
|
delay: { type: Number, default: 500 }
|
|
}
|
|
|
|
connect() {
|
|
setTimeout(() => {
|
|
this.scrollToActiveItem()
|
|
}, this.delayValue)
|
|
}
|
|
|
|
scrollToActiveItem() {
|
|
const activeItem = this.element?.querySelector(this.selectorValue)
|
|
|
|
|
|
if (!activeItem) return
|
|
|
|
const scrollContainer = this.element
|
|
const containerRect = scrollContainer.getBoundingClientRect()
|
|
const activeItemRect = activeItem.getBoundingClientRect()
|
|
|
|
const scrollPositionX = (activeItemRect.left + scrollContainer.scrollLeft) -
|
|
(containerRect.width / 2) +
|
|
(activeItemRect.width / 2)
|
|
|
|
const scrollPositionY = (activeItemRect.top + scrollContainer.scrollTop) -
|
|
(containerRect.height / 2) +
|
|
(activeItemRect.height / 2)
|
|
|
|
|
|
// Smooth scroll to position
|
|
scrollContainer.scrollTo({
|
|
top: Math.max(0, scrollPositionY),
|
|
left: Math.max(0, scrollPositionX),
|
|
behavior: 'smooth'
|
|
})
|
|
}
|
|
} |