teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

jQueryのdelayメソッドを使わなくてもタイミングを合わせられるので、削除

2019/06/12 07:36

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -40,6 +40,7 @@
40
40
  // .NavMenuのtransitionに効かせている、アニメーション時間を動的にとるための変数を用意
41
41
  const navDom = $('.NavMenu').get(0);
42
42
  const navStyle = window.getComputedStyle(navDom);
43
+ // 画面幅が、960px以上だと、0か、数値にならないとなるので、その場合は、600が入るようにした。
43
44
  const navTransitionDuration = (isNaN(parseFloat(navStyle.transitionDuration)) || parseFloat(navStyle.transitionDuration) == 0 ? 0.6 : parseFloat(navStyle.transitionDuration)) * 1000;
44
45
  // heightに効かせたインナースタイルをタイミングよく解除するためのタイマーを用意
45
46
  let classDelTimer = null;
@@ -50,12 +51,13 @@
50
51
  // heightのインナースタイルを解除しつつ、activeクラスを付与
51
52
  $('.NavMenu').css('height', '').addClass('active'); //クラスを付与
52
53
  } else {
53
- // クラスを外す時、強制的に表示状態を保つため、heightのインナースタイルを効かせつつ、クラスを外す。jQueryのdelayを使うことによって、よりタイミングが合う
54
+ // クラスを外す時、強制的に表示状態を保つため、heightのインナースタイルを効かせつつ、クラスを外す。
54
- $('.NavMenu').css('height', 'auto').removeClass('active').delay(navTransitionDuration); //クラスを外す
55
+ $('.NavMenu').css('height', 'auto').removeClass('active'); //クラスを外す
55
56
  // transitionアニメーションが終了したタイミングで、heightインナースタイルを外すようタイターセット
56
57
  if (classDelTimer) {
57
58
  clearTimeout(classDelTimer);
58
59
  }
60
+ // transition時間プラス0.1秒とすることで、処理遅延が多少出ても、違和感をなくせる
59
61
  classDelTimer = setTimeout(function(){
60
62
  $('.NavMenu').css('height', '');
61
63
  }, navTransitionDuration + 100);

1

transitionDurationが、0や、数値にならなかった時の対応を追記した

2019/06/12 07:36

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -40,7 +40,7 @@
40
40
  // .NavMenuのtransitionに効かせている、アニメーション時間を動的にとるための変数を用意
41
41
  const navDom = $('.NavMenu').get(0);
42
42
  const navStyle = window.getComputedStyle(navDom);
43
- const navTransitionDuration = parseFloat(navStyle.transitionDuration) * 1000;
43
+ const navTransitionDuration = (isNaN(parseFloat(navStyle.transitionDuration)) || parseFloat(navStyle.transitionDuration) == 0 ? 0.6 : parseFloat(navStyle.transitionDuration)) * 1000;
44
44
  // heightに効かせたインナースタイルをタイミングよく解除するためのタイマーを用意
45
45
  let classDelTimer = null;
46
46