ソースコードを読み解きたい
jQueryのslideUp/slideDownを生のJavaScriptで書かれている記事があるのですが、一部理解できない箇所があったので、ベテランの方ご教授いただけないでしょうか。
該当記事↓
https://web-dev.tech/front-end/javascript/slide-methods-on-vanilla-javascript/#index_id6
slideUpのソースコード
JavaScript
1const slideUp = (el, duration = 300) => { 2 el.style.height = el.offsetHeight + "px"; 3 el.offsetHeight; ※これをこの位置で読み取る必要性 4 el.style.transitionProperty = "height, margin, padding"; 5 el.style.transitionDuration = duration + "ms"; 6 el.style.transitionTimingFunction = "ease"; 7 el.style.overflow = "hidden"; 8 el.style.height = 0; 9 el.style.paddingTop = 0; 10 el.style.paddingBottom = 0; 11 el.style.marginTop = 0; 12 el.style.marginBottom = 0; 13 setTimeout(() => { 14 el.style.display = "none"; 15 el.style.removeProperty("height"); 16 el.style.removeProperty("padding-top"); 17 el.style.removeProperty("padding-bottom"); 18 el.style.removeProperty("margin-top"); 19 el.style.removeProperty("margin-bottom"); 20 el.style.removeProperty("overflow"); 21 el.style.removeProperty("transition-duration"); 22 el.style.removeProperty("transition-property"); 23 el.style.removeProperty("transition-timing-function"); 24 }, duration); 25};
slideDownのソースコード
JavaScript
1const slideDown = (el, duration = 300) => { 2 el.style.removeProperty("display"); 3 let display = window.getComputedStyle(el).display; 4 if (display === "none") { 5 display = "block"; 6 } 7 el.style.display = display; 8 let height = el.offsetHeight; 9 el.style.height = 0; 10 el.style.paddingTop = 0; 11 el.style.paddingBottom = 0; 12 el.style.marginTop = 0; 13 el.style.marginBottom = 0; 14 el.offsetHeight; ※これをこの位置で読み取る必要性 15 el.style.transitionProperty = "height, margin, padding"; 16 el.style.transitionDuration = duration + "ms"; 17 el.style.transitionTimingFunction = "ease"; 18 el.style.overflow = "hidden"; 19 el.style.height = height + "px"; 20 el.style.removeProperty("padding-top"); 21 el.style.removeProperty("padding-bottom"); 22 el.style.removeProperty("margin-top"); 23 el.style.removeProperty("margin-bottom"); 24 setTimeout(() => { 25 el.style.removeProperty("height"); 26 el.style.removeProperty("overflow"); 27 el.style.removeProperty("transition-duration"); 28 el.style.removeProperty("transition-property"); 29 el.style.removeProperty("transition-timing-function"); 30 }, duration); 31};
el.offsetHeight;を上記の場所で記述する理由が理解できない
試しに、el.offsetHeight;
を消したり記述位置を変えたりすると、アニメーションが滑らかではなくなります。
アニメーションがガタいて挙動が若干おかしくなるので、必要なコードというのは理解できるのですが、どのような役割を担っているのか不明なため知りたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/08 01:21
2021/09/08 01:21