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();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
let scrollRemove: (() => void) | null = $ref(null);
 | 
			
		||||
 | 
			
		||||
function notifyNewMessage() {
 | 
			
		||||
	showIndicator = true;
 | 
			
		||||
 | 
			
		||||
	onScrollBottom(rootEl, () => {
 | 
			
		||||
	scrollRemove = onScrollBottom(rootEl, () => {
 | 
			
		||||
		showIndicator = false;
 | 
			
		||||
		scrollRemove = null;
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -277,6 +280,7 @@ onMounted(() => {
 | 
			
		|||
onBeforeUnmount(() => {
 | 
			
		||||
	connection?.dispose();
 | 
			
		||||
	document.removeEventListener('visibilitychange', onVisibilitychange);
 | 
			
		||||
	if (scrollRemove) scrollRemove();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
defineExpose({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@ export function getScrollPosition(el: HTMLElement | null): number {
 | 
			
		|||
	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)) {
 | 
			
		||||
		cb();
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ export function onScrollTop(el: HTMLElement, cb: Function, asobi: number = 1) {
 | 
			
		|||
		if (!document.body.contains(el)) return;
 | 
			
		||||
		if (isTopVisible(el, asobi)) {
 | 
			
		||||
			cb();
 | 
			
		||||
			removeListener();
 | 
			
		||||
			if (once) removeListener();
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ export function onScrollTop(el: HTMLElement, cb: Function, asobi: number = 1) {
 | 
			
		|||
	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);
 | 
			
		||||
 | 
			
		||||
	// とりあえず評価してみる
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ export function onScrollBottom(el: HTMLElement, cb: Function, asobi: number = 1)
 | 
			
		|||
		if (!document.body.contains(el)) return;
 | 
			
		||||
		if (isBottomVisible(el, 1, container)) {
 | 
			
		||||
			cb();
 | 
			
		||||
			removeListener();
 | 
			
		||||
			if (once) removeListener();
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue