Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滚动时如何停止window.onresize事件?我只需要开火一次?_Javascript_Html - Fatal编程技术网

Javascript 滚动时如何停止window.onresize事件?我只需要开火一次?

Javascript 滚动时如何停止window.onresize事件?我只需要开火一次?,javascript,html,Javascript,Html,我一路尝试,但window.onresize在向上或向下滑动页面时仍会启动 首先,我尝试一个基本命令行: window.onresize = function (event) { setTimeout(Orientation,500); } function Orientation() { if (window.innerHeight > window.innerWidth) { alert("Portrait"); } else { alert("Landscap

我一路尝试,但window.onresize在向上或向下滑动页面时仍会启动

首先,我尝试一个基本命令行:

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

function Orientation() {
 if (window.innerHeight > window.innerWidth) {
   alert("Portrait");
  }
else {
   alert("Landscape");
  }
}
当警报显示时,我单击“确定”。但当我在页面上上上下滑动时,警报再次出现,总是这样

我将尝试jquery的David Walsh:

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);
结果是一样的

您可以通过手机或平板电脑在此尝试:


这个活动还有其他方式吗?非常感谢

在函数中添加一个条件,使函数仅在需要时启动

window.onresize=doSomething;
变量计数=0
功能剂量测定法(x){

如果(count在这种情况下,我找不到使用事件调整大小的方法,但我找到了另一种解决方案:

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);
var-orien='';
setInterval(函数(){
如果(window.innerHeight>=window.innerWidth&&orien!=“纵向”){
警惕(“肖像”);
orien=‘肖像’;
返回;
}
if(window.innerHeight
哇,太棒了,完成了!!!谢谢你漂亮的帮助!但是Window.resize事件现在停止,我希望它在Window.resize时运行一次?我想你没有意识到我的意思。停止你的函数启动,而不是事件。去掉超时并将其放入你的函数中。不要使用“if else”设置两个单独的条件。并非所有内容都是“if else”对window.resize事件没有影响?抱歉,这是我的错误,在这种情况下,我找不到使用事件调整大小的方法,但我找到了另一种解决方案。我在答案中添加了代码。请查看