当前位置: 首页 > 面试题库 >

窗口innerWidth大小更改时的AngularJS事件

麹飞航
2023-03-14
问题内容

我正在寻找一种观察窗口内部宽度大小变化的方法。我尝试了以下操作,但没有成功:

$scope.$watch('window.innerWidth', function() {
     console.log(window.innerWidth);
});

有什么建议?


问题答案:

我们可以使用jQuery来做到这一点:

$(window).resize(function(){
    alert(window.innerWidth);

    $scope.$apply(function(){
       //do something to update current scope based on the new innerWidth and let angular update the view.
    });
});

请注意,将事件处理程序绑定在可以 重新创建的 范围内(例如ng-
repeat范围,指令范围等)时,在销毁该范围时应取消绑定事件处理程序。如果不执行此操作,则每次重新创建作用域(重新运行控制器)时,都会再添加1个处理程序,从而导致意外行为和泄漏。

在这种情况下,您可能需要标识附加的处理程序:

  $(window).on("resize.doResize", function (){
      alert(window.innerWidth);

      $scope.$apply(function(){
          //do something to update current scope based on the new innerWidth and let angular update the view.
      });
  });

  $scope.$on("$destroy",function (){
      $(window).off("resize.doResize"); //remove the handler added earlier
  });

在此示例中,我使用的是jQuery中的事件名称空间。您可以根据自己的要求进行不同的处理。

改进 :如果您的事件处理程序需要花费很长的时间来处理,为避免用户可能会不断调整窗口大小,导致事件处理程序多次运行,我们可以考虑对函数进行
节流 。如果使用下划线,则可以尝试:

$(window).on("resize.doResize", _.throttle(function (){
    alert(window.innerWidth);

    $scope.$apply(function(){
        //do something to update current scope based on the new innerWidth and let angular update the view.
    });
},100));

取消 功能:

$(window).on("resize.doResize", _.debounce(function (){
     alert(window.innerWidth);

     $scope.$apply(function(){
         //do something to update current scope based on the new innerWidth and let angular update the view.
     });
},100));


 类似资料:
  • 我有一个流是消费的Flink Kafka消费者将加入另一个流为定义的窗口大小,如Time.milliseconds(10000)。 如何在运行时将窗口大小更改为Time.milliseconds(20000)?

  • 问题内容: 我正在使用Java编写一个简单的绘画程序,并且每当调整JFrame组件的大小时,我都希望调用某种方法。但是我找不到像windowResizedListener之类的任何方法或诸如windowResizedEvent之类的事件。我能做什么?! 问题答案: 实现一个具有:

  • 问题内容: 我有一个奇怪的问题。我正在为窗口使用null布局(= JFrame,并且在窗口上),如果我使用setResizable(false),则窗口大小会变大(左右分别是10像素左右)。我不知道为什么。 两个println返回相同的大小,这很奇怪,也… 有人有主意吗?为什么要调整窗口大小? 更新:这里是一样的东西(如果有重叠的窗口,则在有和没有setResizable的情况下进行编译,然后您将

  • 我不能做的是找到一种方法来改变Vbox的尺寸(绿色段),然后根据窗口的大小改变按钮(橙色段)。(当用户使用窗口大小时) 我更喜欢找到一种方法将参数设置到我的css文件中,或者作为最后的手段在我的FXML中。 .css文件:

  • 问题内容: 如何挂接到浏览器窗口调整大小事件? 有一种jQuery侦听调整大小事件的方法,但我不希望仅出于这一要求就将其引入我的项目中。 问题答案: jQuery只是包装了标准的DOM事件,例如。 jQuery 可以 做一些工作来确保在所有浏览器中一致地触发resize事件,但是我不确定任何浏览器是否有所不同,但是我建议您在Firefox,Safari和IE中进行测试。

  • 问题内容: 因此,关于使用Capybara和RSpec进行集成测试,我知道我可以这样做: 如何设置浏览器窗口大小的Rspec的(selenium)为特定的RSpec的测试,但有没有办法做到这一点在全球范围使每一个被媒体查询测试的影响没有定义呢? 问题答案: 您可以在下定义