2017-09-29 2 views
0

ウィンドウの幅が変更されたときにnavbarのアニメーションを作成するイベントリスナーを追加/削除する方法はありますか?ウィンドウの幅が変更されたときにイベントリスナーを追加/削除する方法

小さな画面(例:幅< 768)の場合→イベントリスナーがある場合は、それを削除してナビバーを一番上に固定します。スクロール時にアニメーションが表示されません。

大画面で→スクロール

<div id="page-header"> 
<nav class="navbar"> </nav> 
</div> 

<script> 
    var flag = true; 
    $(window).on('scroll', function() { 
     if ($(window).scrollTop() > 54 && flag ==true) { 
      console.log('Event Fired'); 
      $('#page-header nav').css({ 
       'position': 'fixed', 
       'top': '-54px', 
       'width': '100%', 
       'z-index': '1000' 
      }) 
      .animate({ 
       top: '+=54px' 
      }, 500); 
      flag = false; 
     } else if ($(window).scrollTop() === 0) { 
      $('#page-header nav').css({ 
       'position': 'relative' 
      }); 
      flag = true; 
     } 
    }); 

</script> 

答えて

0

これには、JQuery off()メソッドを使用できます。むしろ、それは別の機能であなたのハンドラインライン場所を置くことよりも...

function eventHandler(e) { 
    /* ... do something ... */ 
} 

...そしてセレクタ限りそう...

/* attach */ 
$('selector').on('event', eventHandler); 

/* remove */ 
$('selector').off('event', eventHandler); 

のようなリスナーを取り付け、取り外し、イベント、およびハンドラは 'on'のように 'off'で完全に一致しますが、動作は削除されます。

More info @ JQuery

希望に役立ちます。 :)

+0

別の関数にハンドラを置いたときになぜそれがうまく動作しないのかわかりません...セレクタがウィンドウであるため、.off()メソッドを使用するときに他のスクロールイベントを削除しません? – Akito

+0

ああ、今私は、オプションの名前空間を追加してイベントを特定できることを知っている。 – Akito

+0

は、私の別の関数がハンドラ関数の後に追加されたかっこのために機能しないことを発見しました。ここでのもう1つの問題は、「オフ」から「オン」に切り替えるときです。時には機能しない場合もあります。それは不安定です。 – Akito

0

あなたはWindow.matchMedia()を使用することができたときにアニメーションを表示するには、イベントリスナーを追加します。 APIドキュメントはWindow.matchMedia()

です。互換性については、window.onresizeイベントを聞くことができます。

+0

はい。私はjQueryのresize()を使用しようとしており、すでにイベントハンドラがあるかどうかを検出する方法を見つける必要があります。私はウィンドウサイズを変更するたびにハンドラを追加したくないからです。 – Akito

+0

jQueryの外部APIは、バインドされたイベントを見つけることをサポートしていません。おそらく内部機能によってはそれが可能ですが、それは安定していません。 – sinbar

+0

私はブール変数を使用してイベントの状態を追跡しています。これは現在動作しています。回答ありがとうございます。 :) – Akito

0

私は、画面幅を検出して、フォームの隠しフィールドにその値を設定するには、この操作を行います。

$(function() { 
    var screenwidth = $(window).width(); 
    $('#screenwidthinput').val(screenwidth); 
}); 

あなたは$(ウィンドウ).width()イベントリスナーを呼び出し、追加または削除することを使用することができますそれに応じてコード。

JQueryにはresize()メソッドがあり、ユーザーがいつそのことを知ることができます。 https://www.w3schools.com/jquery/event_resize.asp

関連する問題