通常、イベントが発生する度に繰り返し実行される、scrollresizeイベントの処理を、1回だけ実行したい時は、「変数」を使用することで実装できます。

スクロールイベント

スクロールを開始したら、「.pagetop」が下から飛び出すアニメーションを実装する場合、下記のように記述するとアニメーションが繰り返されてしまいます。

jQuery

$(function() {
  var pagetop = $('.pagetop');
  
  $(window).on('scroll', function () {
    if ($(this).scrollTop() > 100) { // トップから100pxスクロールしたらスライドイン
		  pagetop.animate({
		  bottom: "50px"
		}, 600).animate({
		  bottom: "20px" // 下からスライドして20pxのところで固定
		});
    }
  });
});

アニメーションが繰り返されないように、するために下記のように変更しました。

jQuery

$(function() {
  var flag = false, // 追加 
  	  pagetop = $('.pagetop');
  
  $(window).on('scroll', function () {
    if ($(this).scrollTop() > 100) { // トップから100pxスクロールしたらスライドイン
      if (!flag) { // 追加 
        flag = true; // 追加 
        pagetop.animate({
          bottom: "50px"
        }, 600).animate({
          bottom: "20px" // 下からスライドして20pxのところで固定
        });
      }
    }
  });
});

リサイズイベント

次は画面サイズによって処理を実行する方法です。

画面サイズは変数を用いて、PCの時とSPの時を判定させ、PCからSPに切り替わった時とSPからPCに切り替わった時に一回だけ処理を実行します。

jQuery

var flag = '';
// 画面サイズの判定
function windowSize() {
    // 画面幅取得
    var w = $(window).innerWidth();
 
    // 画面幅767以下(フラグがspではない時)
    if (w <= 767 && flag != 'sp') {
        flag = 'sp';
		    // sp時の処理をここに書く
      console.log('spの処理')
      // 画面幅768以上(フラグがpcではない時)
    } else if (w > 767 && flag != 'pc') {
        flag = 'pc';
		    // pc時の処理をここに書く
      console.log('pcの処理')
    }
}

$(function() {
    // 画面サイズのチェック
    $(window).on('load resize', function() {
        windowSize();
    });
});