2017-11-21 17 views
-1

私は、モバイルユーザーのためにフォーカス機能を自動スクロールしたいので、入力に重複することがあるキーボードに問題がありません。
- >誰かが入力をクリックすると、固定ナビゲーションのためページが-64pxまでスクロールします。

私の問題は、私はセットアップので横向きから縦向きに機能が動作しない可能性があり、たとえば場合は、タブレットユーザーの変更図である:

if ($(window).width() <= 1250) {}); 

だから私はそのようなコール機能を作った:

$(window).resize(function() { 
    resizeFix(); 
}); 

しかし、問題は、変更されたウィンドウの幅の後に無限回ループすることです。


全体コード:

$(document).ready(function(){ 
    resizeFix = function() { 
      if ($(window).width() <= 1250) { 
      $('input[type=text], input[type=checkbox], input[type=password], textarea').focus(function() { 
        $('html, body').animate({ 
         scrollTop: $('input:focus, textarea:focus').offset().top - 64 
        }, 500); 
       }); 
      }; 

    }; 

    resizeFix(); 

    $(window).resize(function() { 
     resizeFix(); 
    }); 
}); 

編集:私はすでに試した:

$(window).resize(function() { 
    if ($(window).width() <= 1250) { 
    resizeFix(); 
}); 
}); 

答えて

1

各resizeイベントにあなたは要素ごとにフォーカスするための新しいイベントリスナーをアタッチしているためです。あなただけがを1つとしたいです。たとえば、ブール値でそれを追跡してください。 (実際に何をしているのかは、関数resizeFixが既にトリガされているかどうかを追跡していることです)リスナーが> 1250にスケールを変更したときに再度トリガーしないようにするには、off()を呼び出します。

$(document).ready(function() { 
    var listenerAttached = false; 
    var resizeFix = function() { 
    var w = $(window).width(); 
    if (!listenerAttached && w <= 1250) { 
     $('input[type=text], input[type=checkbox], input[type=password], textarea').on("focus", function() { 
     $('html, body').animate({ 
      scrollTop: $('input:focus, textarea:focus').offset().top - 64 
     }, 500); 
     }); 
     listenerAttached = true; 
    } else if (listenerAttached && w > 1250) { 
     $('input[type=text], input[type=checkbox], input[type=password], textarea').off("focus"); 
     listenerAttached = false; 
    } 
    }; 

    resizeFix(); 

    $(window).resize(function() { 
    resizeFix(); 
    }); 
}); 
+0

ありがとうございましたループが停止しましたが、1250px +のように見えますが、機能はまだ動作しています。編集:私は1250未満のウィンドウを使用して1250px以上の後に関数とスケールを呼び出す場合を意味します。 – delato468

+0

ウィンドウの幅が1250ピクセルを超えると、何らかの理由でリスナーを削除できますか?私は他と一緒に試しました{ \t \t var resizeFix = ''; \t \t}しかし、そのようには機能しません。 – delato468

+0

@ delato468もちろん!私の編集を参照してください。 –

関連する問題