0

ウィンドウの幅に基づいてコンテンツが読み込まれる、このプログラムを作成しています。ページの読み込み時には、適切な HTML と CSS が添付されていれば正常に機能します。しかし、ページのサイズを変更すると、適切なシートをロードするために ajax があまりにも多くの呼び出しを行うため、コンテンツがちらつきます。JQuery には 1 万の答えがあるようですが、ネイティブ Javascript には答えがありません。SOに関するこれらの質問と回答の多くから、サイズ変更関数のCOMPLETIONで1つの値を取得するにはタイムアウトが必要であると推測しました。しかし..無駄に。タイムアウトがあっても、AJAX をすばやく呼び出します。これは私がこれまでに取り組んできたことです。

function layoutHandler(){   
    if(window.innerWidth <= 400){
            // AJAX call
       } else if(window.innerWidth >= 401 && window.innerWidth <= 770){
            // AJAX call
       } else if(window.innerWidth >= 771 && window.innerWidth <= 1150){
            // AJAX call
    }else if(window.innerWidth >= 1150){
           // AJAX call
    }
}
window.onresize = layoutHandler;
layoutHandler(); 

これは、ページの読み込み時にうまく機能します。正しいスクリプトが配置されます。しかし、console.log でブラウザーのサイズを変更すると、大量の呼び出しが行われ、ページがちらつきます。JQueryソリューションに従って、から1つの値を取得する方法をいくつか試しましたwindow.onresize。それでも私は単一の値を取得できませんでしたが、永続的な呼び出しです。
私が読んだことから、私が試したことは、コメントアウトし てBODYの一番下にwindow.onresize = layoutHandler;移動することでした。layoutHandler();次に、これを試しました...

    var resize1 = window.innerWidth;
    console.log(resize1);   
    function myFunction() {
       setTimeout(function(){
          cnt();
       }, 1000);    
    }   
    window.addEventListener("resize", myFunction);
    function cnt(){
    var resize2 = window.innerWidth;    
        if(resize1 != resize2){
            console.log('no match');
            //layoutHandler(); << this is where it makes repeated calls to the function
        }
    }
console.log(resize2);

タイムアウトがあっても、関数を呼び出してすべてのピクセルの増加に反応します。すべての呼び出しでページがちらつくことを除いて、これは完璧に機能します。サイズ変更イベントの後に SINGLE 値を取得できれば、問題は解決します。ネイティブ Javascript ソリューション / 提案を探しています。
事前に TY.

4

1 に答える 1