2017-07-12 45 views
0

我一路試過,但在頁面上向上或向下滑動時,window.onresize仍然會觸發。如何在滾動時停止window.onresize事件?我只需要射擊一次?

首先,我嘗試了基本的命令行:

window.onresize = function (event) { 
    setTimeout(Orientation,500); 
} 

function Orientation() { 
if (window.innerHeight > window.innerWidth) { 
    alert("Portrait"); 
    } 
else { 
    alert("Landscape"); 
    } 
} 

當警報顯示出來,我點擊確定。但是,當我再次刷卡向上或向下的頁面上,警報顯示出來,送花兒給人這樣的...

我會嘗試jQuery的大衛·沃爾什:

function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var context = this, args = arguments; 
     var later = function() { 
      timeout = null; 
      if (!immediate) func.apply(context, args); 
     }; 
     var callNow = immediate && !timeout; 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
     if (callNow) func.apply(context, args); 
    }; 
}; 

var myEfficientFn = debounce(function() { 
    if (window.innerHeight > window.innerWidth) { 
    alert("Portrait"); 
    } 
else { 
    alert("Landscape"); 
    } 
}, 250); 

window.addEventListener('resize', myEfficientFn); 

的結果是一樣的!

您可以通過手機或平板電腦試一下:http://hangaumy.com/test.html

是否有此事件的任何其他方式?非常感謝 !

回答

0

在你的函數中添加一個條件,這樣你的函數只在你想要的時候觸發。

window.onresize = doSomething; 
 
var count=0 
 
function doSomething(x) { 
 
if(count<1){ 
 
    alert('Go' + x); 
 
    } 
 
    count+=1; 
 
}

+0

WOW,令人驚歎,它的完成!感謝您的美麗幫助!但Window.resize事件現在停止,我希望它運行一次Window.resize? –

+0

我不認爲你意識到我正在做的這一點。停止你的功能而不是事件。取出超時並將其放入函數中。不要使用「if else」做出兩個單獨的條件。並非一切都是「如果其他」 – Rick

0

我不能找到一種方法,使用事件調整在這種情況下,但我發現另一種解決方案:

var orien = ''; 
setInterval(function() { 
    if (window.innerHeight >= window.innerWidth && orien != 'Portrait') { 
    alert('Portrait'); 
    orien = 'Portrait'; 
    return; 
    } 
    if (window.innerHeight < window.innerWidth && orien != 'Landscape') { 
    alert('Landscape'); 
    orien = 'Landscape'; 
    } 
}, 500); 
+0

對window.resize事件沒有影響? –

+0

對不起,我的錯誤,我找不到在這種情況下使用事件調整大小的方式,但我找到了另一種解決方案。我將代碼添加到答案中。看看它 –