scroll event once or not
This commit is contained in:
		
							parent
							
								
									b96e98b0f1
								
							
						
					
					
						commit
						7a4d617699
					
				
					 2 changed files with 9 additions and 5 deletions
				
			
		|  | @ -251,11 +251,14 @@ function onIndicatorClick() { | ||||||
| 	thisScrollToBottom(); | 	thisScrollToBottom(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | let scrollRemove: (() => void) | null = $ref(null); | ||||||
|  | 
 | ||||||
| function notifyNewMessage() { | function notifyNewMessage() { | ||||||
| 	showIndicator = true; | 	showIndicator = true; | ||||||
| 
 | 
 | ||||||
| 	onScrollBottom(rootEl, () => { | 	scrollRemove = onScrollBottom(rootEl, () => { | ||||||
| 		showIndicator = false; | 		showIndicator = false; | ||||||
|  | 		scrollRemove = null; | ||||||
| 	}); | 	}); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -277,6 +280,7 @@ onMounted(() => { | ||||||
| onBeforeUnmount(() => { | onBeforeUnmount(() => { | ||||||
| 	connection?.dispose(); | 	connection?.dispose(); | ||||||
| 	document.removeEventListener('visibilitychange', onVisibilitychange); | 	document.removeEventListener('visibilitychange', onVisibilitychange); | ||||||
|  | 	if (scrollRemove) scrollRemove(); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| defineExpose({ | defineExpose({ | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ export function getScrollPosition(el: HTMLElement | null): number { | ||||||
| 	return container == null ? window.scrollY : container.scrollTop; | 	return container == null ? window.scrollY : container.scrollTop; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function onScrollTop(el: HTMLElement, cb: Function, asobi: number = 1) { | export function onScrollTop(el: HTMLElement, cb: Function, asobi: number = 1, once: boolean = false) { | ||||||
| 	// とりあえず評価してみる
 | 	// とりあえず評価してみる
 | ||||||
| 	if (isTopVisible(el)) { | 	if (isTopVisible(el)) { | ||||||
| 		cb(); | 		cb(); | ||||||
|  | @ -38,7 +38,7 @@ export function onScrollTop(el: HTMLElement, cb: Function, asobi: number = 1) { | ||||||
| 		if (!document.body.contains(el)) return; | 		if (!document.body.contains(el)) return; | ||||||
| 		if (isTopVisible(el, asobi)) { | 		if (isTopVisible(el, asobi)) { | ||||||
| 			cb(); | 			cb(); | ||||||
| 			removeListener(); | 			if (once) removeListener(); | ||||||
| 		} | 		} | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  | @ -47,7 +47,7 @@ export function onScrollTop(el: HTMLElement, cb: Function, asobi: number = 1) { | ||||||
| 	return removeListener; | 	return removeListener; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function onScrollBottom(el: HTMLElement, cb: Function, asobi: number = 1) { | export function onScrollBottom(el: HTMLElement, cb: Function, asobi: number = 1, once: boolean = false) { | ||||||
| 	const container = getScrollContainer(el); | 	const container = getScrollContainer(el); | ||||||
| 
 | 
 | ||||||
| 	// とりあえず評価してみる
 | 	// とりあえず評価してみる
 | ||||||
|  | @ -61,7 +61,7 @@ export function onScrollBottom(el: HTMLElement, cb: Function, asobi: number = 1) | ||||||
| 		if (!document.body.contains(el)) return; | 		if (!document.body.contains(el)) return; | ||||||
| 		if (isBottomVisible(el, 1, container)) { | 		if (isBottomVisible(el, 1, container)) { | ||||||
| 			cb(); | 			cb(); | ||||||
| 			removeListener(); | 			if (once) removeListener(); | ||||||
| 		} | 		} | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue