Javascript 重新调整触发器功能一次,直到条件为真或假

Javascript 重新调整触发器功能一次,直到条件为真或假,javascript,Javascript,我正在努力寻找解决方案,需要一些帮助吗:这是一个简单的例子: function ifTrueInitiateOnce() { console.log("True function should be initiated/triggered Once"); } function ifFalseInitiateOnce() { console.log("False function should be initiated/triggered Once"); } $(window).res

我正在努力寻找解决方案,需要一些帮助吗:这是一个简单的例子:

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");
}

我没有完全正确地理解它,或者可能使它变得更复杂。我想从这段代码中得到的是。一旦屏幕进入移动视图或桌面视图,在调整窗口大小时,如果达到移动大小,则仅触发该功能一次,然后从桌面到移动窗口重新调整大小,然后仅触发该功能一次,并在调整桌面大小时执行相同操作。

应触发一次的功能,应该在resize函数中调用。我在comment
getWinSize()
中添加了注释,因为您说过您只想在有人真正调整大小时调用函数。如果应该在页面加载时调用它,则取消对它的注释

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();
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);
});

只需创建值为false的变量,该变量在第一次调用后将为true。如果变量为true,则不要调用函数。Simple@instead我试着像你说的那样做,但它的“调整大小事件”,我不知道如何修复它。我添加了更多的代码,让您了解我正在尝试做的事情。它有效吗?应该调用一次的函数在哪里?感谢您的尝试,但是Kratik的代码正在做我需要的事情。
$(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")
    }
  }
});