11import type { InterestEvent } from "../types" ;
22
3- let showPreview = false ;
3+ let isWaiting = false ;
44
55const previewElement = document . querySelector < HTMLElement > ( ".preview" ) ;
66const previewImageElement = previewElement ?. querySelector < HTMLImageElement > ( ".ogpImage" ) ;
@@ -16,10 +16,9 @@ previewElement?.addEventListener("interest", async (event: InterestEvent) => {
1616 if ( previewElement ) {
1717 previewElement . style . positionAnchor = sourceElement . style . anchorName ;
1818 }
19-
19+ isWaiting = false ;
2020 const response = await fetch ( url ) ;
2121 const html = await response . text ( ) ;
22- showPreview = true ;
2322
2423 // DOMParserでHTMLをパース
2524 const parser = new DOMParser ( ) ;
@@ -49,18 +48,19 @@ previewElement?.addEventListener("interest", async (event: InterestEvent) => {
4948
5049previewElement ?. addEventListener ( "loseinterest" , async ( ) => {
5150 if ( previewElement && previewImageElement && previewTitleElement && previewDescriptionElement ) {
51+ isWaiting = true ;
5252 // アニメーションを待つために250ms待つ
5353 await new Promise ( ( resolve ) => setTimeout ( resolve , 250 ) ) ;
54- if ( showPreview ) {
55- return ; // プレビューが表示されている場合は何もしない
56- }
57- // データをクリア
58- previewImageElement . src = "" ;
59- previewTitleElement . textContent = "" ;
60- previewDescriptionElement . textContent = "" ;
54+
6155 // プレビューを非表示
62- previewElement ?. hidePopover ?.( ) ;
63- showPreview = false ;
56+ if ( isWaiting ) {
57+ // データをクリア
58+ previewImageElement . src = "" ;
59+ previewTitleElement . textContent = "" ;
60+ previewDescriptionElement . textContent = "" ;
61+ previewElement ?. hidePopover ?.( ) ;
62+ isWaiting = false ;
63+ }
6464 }
6565} ) ;
6666
0 commit comments