This commit is contained in:
		
							parent
							
								
									f565e0f8a5
								
							
						
					
					
						commit
						78944bf441
					
				|  | @ -233,43 +233,23 @@ watch([$$(weakBacked), $$(contentEl)], () => { | |||
| 	})(); | ||||
| }); | ||||
| 
 | ||||
| function preventDefault(ev: Event) { | ||||
| 	ev.preventDefault(); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * アイテムを上に追加した場合に追加分だけスクロールを下にずらす | ||||
|  * @param fn DOM操作(unshiftItemsなどで) | ||||
|  */ | ||||
| function adjustScroll(fn: () => void): Promise<void> { | ||||
| 	const oldHeight = scrollableElement ? scrollableElement.scrollHeight : getBodyScrollHeight(); | ||||
| 	const oldScroll = scrollableElement ? scrollableElement.scrollTop : window.scrollY; | ||||
| 	// スクロールをやめさせる | ||||
| 	try { | ||||
| 		// なぜかscrollableElementOrHtmlがundefinedであるというエラーが出る | ||||
| 		scrollableElementOrHtml.addEventListener('mousewheel', preventDefault, { passive: false }); | ||||
| 		scrollableElementOrHtml.addEventListener('touchmove', preventDefault, { passive: false }); | ||||
| 		// ついでにtryに入れてみる | ||||
| 		scroll(scrollableElement, { top: oldScroll, behavior: 'instant' }); | ||||
| 	} catch (err) { | ||||
| 		console.error(err, { scrollableElementOrHtml }); | ||||
| 	} | ||||
| 
 | ||||
| 	denyMoveTransition.value = true; | ||||
| 
 | ||||
| 	fn(); | ||||
| 
 | ||||
| 	return nextTick(() => { | ||||
| 		try { | ||||
| 			const top = oldScroll + ((scrollableElement ? scrollableElement.scrollHeight : getBodyScrollHeight()) - oldHeight); | ||||
| 			scroll(scrollableElement, { top, behavior: 'instant' }); | ||||
| 		const diff = (scrollableElement ? scrollableElement.scrollHeight : getBodyScrollHeight()) - oldHeight; | ||||
| 		const newScroll = scrollableElement ? scrollableElement.scrollTop : window.scrollY; | ||||
| 		const top = newScroll + diff; | ||||
| 		scroll(scrollableElement, { top, behavior: 'instant' }); | ||||
| 
 | ||||
| 			// なぜかscrollableElementOrHtmlがundefinedであるというエラーが出る | ||||
| 			scrollableElementOrHtml.removeEventListener('mousewheel', preventDefault); | ||||
| 			scrollableElementOrHtml.removeEventListener('touchmove', preventDefault); | ||||
| 		} catch (err) { | ||||
| 			console.error(err, { scrollableElementOrHtml }); | ||||
| 		} | ||||
| 		denyMoveTransition.value = false; | ||||
| 		return nextTick(); | ||||
| 	}); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue