1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

componentDidMountでReflow

Last updated at Posted at 2020-03-23

chromeブラウザでReflowがCSSアニメーションと相性悪いようで、余計なアニメーションが走ってしまうことがある。

画面内容

画面遷移が発生する時に、次のように遷移先の画面が右側から左に移動するようCSSアニメーションが実装されている。

	&SlideFromRight-enter,
	&SlideFromRight-appear {
		left: 100%;
		transition: all 300ms cubic-bezier(.165, .84, .44, 1);
		pointer-events: none;
		opacity: 0;

		&-active {
			left: 0;
			opacity: 1;
		}
	}

	&SlideFromRight-exit {
		left: 0;
		transition: all 300ms cubic-bezier(.165, .84, .44, 1);
		pointer-events: none;
		opacity: 1;

		&-active {
			left: -100%;
			opacity: 0;
		}
	}

問題点

低スペックのandroid端末で、偶に真白な画面が描画されてしまって、アニメーションが止まってしまったように見える。

調査

React.ComponentのcomponentDidMountでwindow.innerHeightなどをアクセスしている為、Reflowが発生してしまう。その時、余計なアニメーションが走っていることがわかる。

window.innerHeightをアクセスする処理を削除すると、余計なアニメーションがなくなり、真白画面もなくなる。

image.png

対応

Reflowを発生させる上記処理をsetTimeoutで遅延することで、余計なアニメーションがなくなる。

参考記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?