2

したがって、これはこれの単純化された質問です(この質問を簡単にするために、参照用に使用しています...)

x ピクセル (jQuery) を超える場合は、resize を使用して getScript を取得します。

スクリプトを取得する関数を呼び出した場合、その関数が再び起動しても、スクリプトは再度読み込まれません。

^ そのコードはどれですか。

getScript - まだ呼び出されていない場合にのみ呼び出す方法

は一例ですが、私はそのコードを少し前に試しました。

元:

$(function() 
{
  var gotscript=false;   
  $(window).resize(function() 
  {
      //Dekstop
      if (window.innerWidth >= 768) 
      {
           if (!gotscript) 
           {
               // GET DESKTOP SCRIPT TO KEEP THINGS QUICK
               $.getScript("js/desktop.js", function() 
               { 
                   gotscript=true;
               });
           }
       }
       if (window.innerWidth < 768) 
       {
           if (window.innerWidth >= 768) 
           {
               if (!gotscript) 
               {
                   // GET DESKTOP SCRIPT TO KEEP THINGS QUICK
                   $.getScript("js/desktop.js", function() 
                   { 
                       gotscript=true;
                   });
               }
            }
       }
   }) .resize(); // trigger resize event
})

これにより、ウィンドウのサイズ変更イベントでスクリプトが読み込まれます。

私は言及するのを忘れていました...

var $window = $(window);

function checkWidth() {
    var windowsize = $window.width();

    ////// LETS GET SOME THINGS IF IS DESKTOP 
    var $desktop_load = 0;
    if (windowsize >= 768) {
        if (!$desktop_load) {
            // GET DESKTOP SCRIPT TO KEEP THINGS QUICK
            $.getScript("js/desktop.js", function() { 
                $desktop_load = 1;
            });
        }
    }
    ////// LETS GET SOME THINGS IF IS MOBILE
    if (windowsize < 768) { 

    } 
}

// Execute on load
checkWidth();

これは、ウィンドウ サイズが 768 を超える場合に機能し、この関数を一度だけロードするため、スクリプトを再度ロードすることはありません。768 未満の場合にスクリプトをロードし、その後 768 を超えて再度ロードしないようにするにはどうすればよいですか。

4

3 に答える 3

0

問題はgetScript非同期であるため$desktop_load、別の関数スコープ内にある変数にアクセスできないことにあると思います。

修正は$desktop_load、グローバル変数を作成することです。

これを試して、

var $desktop_load = 0; // <~~ move the variable into global scope
function checkWidth() {
    var windowsize = $window.width();

    ////// LETS GET SOME THINGS IF IS DESKTOP 
    // var $desktop_load = 0; // <~~ remove the variable from local scope

また、これにより、関数を実行するたびに変数を false に再設定することを回避できます。これは、checkWidthそのようにテストする前に常に false になるためです。必要なものではありません。

ps キャッシュされたオブジェクト$でない限り、javascript で変数のプレフィックスとして使用することは非常にまれです。jQuery

于 2012-07-09T11:36:15.463 に答える
-1

ですから、誰も良い答えを思いつきませんでした。おそらく、私がうまく説明できなかったのでしょう。とにかく、私は自分の問題を解決しました。

@ 768 以上のスクリプトを 1 回だけロードします。ただし、ブラウザが 768 未満でロードされた場合、ブラウザのサイズが 768 を超えて変更され、スクリプトが 1 回ロードされます。これを使用して、ajax によって desktop.js 内からコード ブロックと画像を読み込みます。そのため、機能していない場合は、コンテンツを再読み込みします。例としては、表示されてコンテンツをリセットする読み込み中の gif が挙げられます。この背後にあるアイデアは、css で応答性を維持し、必要に応じて jquery を使用してより大きなループをロードすることでした。

$.ajaxSetup({
  cache: true
});

var $window = $(window);
var onlyonce = 0;

function resizing() {
  var windowsize = $window.width();
  if (windowsize >= 768) {
    getdeskTop();
}};

function getdeskTop() {
  if (onlyonce === 0) {
    grabScript ();
  } else {
  };
};

function grabScript() {
  onlyonce = 1;
  $.getScript("js/desktop.js", function() { });
}

$(window).resize(resizing);
resizing();

これは少し醜いかもしれませんが、うまくいきました:)。

于 2012-07-09T17:32:39.143 に答える