mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 04:51:31 +08:00 
			
		
		
		
	feat(tab-row): Added smooth decay logic to ensure responsive and fluid animation
This commit is contained in:
		
							parent
							
								
									ef581b181f
								
							
						
					
					
						commit
						dd4cb7de7d
					
				| @ -378,16 +378,37 @@ export default class TabRowWidget extends BasicWidget { | ||||
|     } | ||||
| 
 | ||||
|     scrollTabContainer(direction: number, behavior: ScrollBehavior = "smooth") { | ||||
|         const currentScrollLeft = this.$tabScrollingContainer[0]?.scrollLeft; | ||||
|         this.$tabScrollingContainer[0].scrollTo({ | ||||
|             left: currentScrollLeft + direction, | ||||
|         this.$tabScrollingContainer[0].scrollBy({ | ||||
|             left: direction, | ||||
|             behavior | ||||
|         }); | ||||
|     }; | ||||
| 
 | ||||
|     setupScrollEvents() { | ||||
|         let deltaX = 0; | ||||
|         let isScrolling = false; | ||||
|         const stepScroll = () => { | ||||
|             if (Math.abs(deltaX) > 5) { | ||||
|                 const step = Math.round(deltaX * 0.2); | ||||
|                 deltaX -= step; | ||||
|                 this.scrollTabContainer(step, "instant"); | ||||
|                 requestAnimationFrame(stepScroll); | ||||
|             } else { | ||||
|                 this.scrollTabContainer(deltaX, "instant"); | ||||
|                 deltaX = 0; | ||||
|                 isScrolling = false; | ||||
|             } | ||||
|         }; | ||||
|         this.$tabScrollingContainer[0].addEventListener('wheel', (event) => { | ||||
|             this.scrollTabContainer(event.deltaY * 1.5); | ||||
|             if (!event.shiftKey || event.deltaX === 0) { | ||||
|                 event.preventDefault(); | ||||
|                 // Clamp deltaX between TAB_CONTAINER_MIN_WIDTH and TAB_CONTAINER_MIN_WIDTH * 3
 | ||||
|                 deltaX += Math.sign(event.deltaY) * Math.max(Math.min(Math.abs(event.deltaY), TAB_CONTAINER_MIN_WIDTH * 3), TAB_CONTAINER_MIN_WIDTH); | ||||
|                 if (!isScrolling) { | ||||
|                     isScrolling = true; | ||||
|                     stepScroll(); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         this.$scrollButtonLeft[0].addEventListener('click', () => this.scrollTabContainer(-200)); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SiriusXT
						SiriusXT