mirror of
				https://github.com/maunium/stickerpicker.git
				synced 2025-10-30 00:18:06 +01:00 
			
		
		
		
	Scroll navbar when scrolling picker. Fixes #14
This commit is contained in:
		| @@ -43,6 +43,8 @@ class App extends Component { | ||||
| 		this.sendSticker = this.sendSticker.bind(this) | ||||
| 		this.navScroll = this.navScroll.bind(this) | ||||
| 		this.reloadPacks = this.reloadPacks.bind(this) | ||||
| 		this.observeSectionIntersections = this.observeSectionIntersections.bind(this) | ||||
| 		this.observeImageIntersections = this.observeImageIntersections.bind(this) | ||||
| 	} | ||||
|  | ||||
| 	_getStickersByID(ids) { | ||||
| @@ -129,15 +131,32 @@ class App extends Component { | ||||
| 	} | ||||
|  | ||||
| 	observeSectionIntersections(intersections) { | ||||
| 		const navWidth = this.navRef.getBoundingClientRect().width | ||||
| 		let minX = 0, maxX = navWidth | ||||
| 		let minXElem = null | ||||
| 		let maxXElem = null | ||||
| 		for (const entry of intersections) { | ||||
| 			const packID = entry.target.getAttribute("data-pack-id") | ||||
| 			const navElement = document.getElementById(`nav-${packID}`) | ||||
| 			if (entry.isIntersecting) { | ||||
| 				navElement.classList.add("visible") | ||||
| 				const bb = navElement.getBoundingClientRect() | ||||
| 				if (bb.x < minX) { | ||||
| 					minX = bb.x | ||||
| 					minXElem = navElement | ||||
| 				} else if (bb.right > maxX) { | ||||
| 					maxX = bb.right | ||||
| 					maxXElem = navElement | ||||
| 				} | ||||
| 			} else { | ||||
| 				navElement.classList.remove("visible") | ||||
| 			} | ||||
| 		} | ||||
| 		if (minXElem !== null) { | ||||
| 			minXElem.scrollIntoView({ inline: "start", behavior: "smooth" }) | ||||
| 		} else if (maxXElem !== null) { | ||||
| 			maxXElem.scrollIntoView({ inline: "end", behavior: "instant" }) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	componentDidUpdate() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user