2016-09-11 15 views
3

TrueまたはFalseになるまで、私はいくつかの助けをしてください必要、解決策を見つけるのに苦労しています:これは単純な例である:ここでは一度条件が

function ifTrueInitiateOnce() { 
    console.log("True function should be initiated/triggered Once"); 
} 

function ifFalseInitiateOnce() { 
    console.log("False function should be initiated/triggered Once"); 
} 

$(window).resize(function() { 
    if ($(window).width() > 767) { 
    ifTrueInitiateOnce() 
    } else { 
    ifFalseInitiateOnce() 
}); 

は、私がしようとしています、詳細なコードです修正する:

var enteredMobileView = false; 
var enteredDesktopView = false; 

var delay = (function() { 
    var timer = 0; 
    return function (callback, ms) { 
    clearTimeout(timer); 
    timer = setTimeout(callback, ms); 
    }; 
})(); 

function getWinSize() { 
    if ($(window).width() > 767) { 
    enteredDesktopView = true; 
    enteredMobileView = false; 
    } else { 
    enteredDesktopView = false; 
    enteredMobileView = true; 
    } 
} 

getWinSize(); 

$(window).resize(function() { 
    delay(function() { 

    getWinSize(); 

    }, 500); 
}); 

if (enteredDesktopView) { 
    enteredDesktopView = false; 
    ifDesktopInitiateOnce(); 
} 

if (enteredMobileView) { 
    enteredMobileView = false; 
    ifMobileInitiateOnce() 
} 

function ifDesktopInitiateOnce() { 
    console.log("DESKTOP True function should be initiated/triggered Once"); 
} 

function ifMobileInitiateOnce() { 
    console.log("MOBILE True function should be initiated/triggered Once"); 
} 

私はそれを正しく取得していないか、より複雑になっている可能性があります。このコードから抜け出そうとしているのは私です。画面がモバイルビューまたはデスクトップビューになったら、ウィンドウサイズを変更してモバイルサイズに達したら、デスクトップからモバイルへのウィンドウのサイズ変更を1回だけ実行してから、その機能を1回だけトリガーし、デスクトップサイズ。

+2

ただ、最初の呼び出しの後にtrueになります偽の値を持つ変数を作成します。変数がtrueの場合、関数を呼び出さないでください。単純な – instead

+0

@insteadあなたが言ったように私はしようとしましたが、そのサイズ変更のイベントと私はそれを修正する方法がわかりません。私は何をしようとしているのかを理解するためのコードを追加しました。 – Syed

答えて

1
$(window).resize(function() { 
    if ($(window).width() > 767) { 
    if (typeof(desktop) == "undefined") { 
     desktop = true; 
     mobile = undefined; 
     console.log("DESKTOP True function should be initiated/triggered Once") 
    } 
    } else { 
    if (typeof(mobile) == "undefined") { 
     mobile = true; 
     desktop = undefined; 
     console.log("MOBILE True function should be initiated/triggered Once") 
    } 
    } 
}); 
0
var win = (function() { 
    var resize; 
    var view; 
    var enteredDesktopView; 
    var enteredMobileView; 

    function createInstance() { 
     var object = new Object("winresize"); 
     return object; 
    } 

    function getWinSize() { 
     if ($(window).width() > 767) { 
      enteredDesktopView = true; 
      enteredMobileView = false; 
     } else { 
      enteredDesktopView = false; 
      enteredMobileView = true; 
     } 
     view = { 
      "desktopView": enteredDesktopView, 
      "mobileView": enteredMobileView 
     }; 
    } 



    return { 
     checkResize: function() { 
      if (!resize) { 
       resize = createInstance(); 
       getWinSize(); 
      } 
      return resize; 
     } 

    }; 
})(); 

function run() { 
    win.checkResize(); 
    console.log(win.view); 
} 

run(); 
+0

動作しますか?一度呼び出されるべき関数はどこにありますか? – instead

2

一度トリガーされるべきファンクションは、サイズ変更機能で呼び出される必要があります。コメントgetWinSize()に追加しました。あなたは誰かが実際にサイズを変更したときにのみ関数を呼び出すと言っていたからです。ページのロード時に呼び出す必要がある場合は、コメントを外します。

function desktopFunction() { 
    console.log("True function should be initiated/triggered Once"); 
} 

function mobileFunction() { 
    console.log("False function should be initiated/triggered Once"); 
} 

var enteredMobileView = enteredDesktopView = false, 
    delay = (function() { 
     var timer = 0; 

     return function (callback, ms) { 
     clearTimeout(timer); 
     timer = setTimeout(callback, ms); 
     }; 
    })(); 

function getWinSize() { 

    if ($(window).width() > 767) { 

    if(! enteredDesktopView){ 
     desktopFunction(); 
     enteredDesktopView = true; 
     enteredMobileView = false; 
    } 

    } else { 

    if(! enteredMobileView){ 
     mobileFunction(); 
     enteredMobileView = true; 
     enteredDesktopView = false; 
    } 

    } 

} 

// getWinSize(); 

$(window).resize(function() { 
    delay(function() { 
    getWinSize(); 
    }, 500); 
}); 
+0

お試しいただきありがとうございますが、Kratikのコードは私が必要としていることをしています。 – Syed

+0

それは今働いています:)ありがとう。 – Syed

関連する問題