mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-11-01 05:21:32 +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") { |     scrollTabContainer(direction: number, behavior: ScrollBehavior = "smooth") { | ||||||
|         const currentScrollLeft = this.$tabScrollingContainer[0]?.scrollLeft; |         this.$tabScrollingContainer[0].scrollBy({ | ||||||
|         this.$tabScrollingContainer[0].scrollTo({ |             left: direction, | ||||||
|             left: currentScrollLeft + direction, |  | ||||||
|             behavior |             behavior | ||||||
|         }); |         }); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     setupScrollEvents() { |     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.$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)); |         this.$scrollButtonLeft[0].addEventListener('click', () => this.scrollTabContainer(-200)); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SiriusXT
						SiriusXT