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

绑定类切换到窗口滚动事件

巫经义
2023-03-14
问题内容

当用户将浏览器窗口滚动到某个点以下时,我正在切换#page div的类。

到目前为止,我所做的工作正常:

http://jsfiddle.net/eTTZj/29/

<div ng-app="myApp" scroll id="page">

    <header></header>
    <section></section>

</div>

app = angular.module('myApp', []);
app.directive("scroll", function ($window) {
    return function(scope, element, attrs) {
        angular.element($window).bind("scroll", function() {
             if (this.pageYOffset >= 100) {
                 element.addClass('min');
                 console.log('Scrolled below header.');
             } else {
                 element.removeClass('min');
                 console.log('Header is in view.');
             }
        });
    };
});

(当他们将窗口滚动到标题(100像素)以下时,将切换该类)

虽然,如果我错了,请纠正我,但我认为这不是使用Angular进行此操作的正确方法。

相反,我认为执行此操作的最佳方法是使用ng-class并将布尔值存储在范围中。像这样:

<div ng-app="myApp" scroll id="page" ng-class="{min: boolChangeClass}">

    <header></header>
    <section></section>

</div>

app = angular.module('myApp', []);
app.directive("scroll", function ($window) {
    return function(scope, element, attrs) {
        angular.element($window).bind("scroll", function() {
             if (this.pageYOffset >= 100) {
                 scope.boolChangeClass = true;
                 console.log('Scrolled below header.');
             } else {
                 scope.boolChangeClass = false;
                 console.log('Header is in view.');
             }
        });
    };
});

尽管这不是动态的,但是如果我在滚动回调中更改scope.boolChangeClass的值,则ng-class不会更新。

所以我的问题是:当用户滚动到特定点以下时,如何最好地使用AngularJS切换#page类?


问题答案:

为什么你们都建议进行大范围操作?我不明白为什么这不是“角度”解决方案:

.directive('changeClassOnScroll', function ($window) {
  return {
    restrict: 'A',
    scope: {
        offset: "@",
        scrollClass: "@"
    },
    link: function(scope, element) {
        angular.element($window).bind("scroll", function() {
            if (this.pageYOffset >= parseInt(scope.offset)) {
                element.addClass(scope.scrollClass);
            } else {
                element.removeClass(scope.scrollClass);
            }
        });
    }
  };
})

因此,您可以像这样使用它:

<navbar change-class-on-scroll offset="500" scroll-class="you-have-scrolled-down"></navbar>

要么

<div change-class-on-scroll offset="500" scroll-class="you-have-scrolled-down"></div>


 类似资料:
  • 我使用JQuery在向下滚动时隐藏一个元素,并在向上滚动到屏幕顶部时显示它。我遇到的问题是,每当我滚动到窗口顶部时,显示的元素会立即再次隐藏。 我记录了滚动位置,当它滚动到顶部时,它看起来肯定保持在0,所以不太清楚为什么会发生这种情况。我甚至尝试使用大于0的数字,例如10,但同样的情况仍然发生。任何帮助都将不胜感激。 编辑:我根据要求添加了一些简单的html标记,其设置与我的实际代码几乎相同;

  • 我在Windows7上安装了Apache2.2HTTP服务器。端口80已经被使用,我正在尝试将apache绑定到另一个可用端口。我已经修改了C:\Apache\ApacheHTTPserver\Apache24\conf\httpd。txt文件将Listen 80的值更改为Listen 88或Listen 7777(我已检查端口88和7777是否可用),并将ServerName localhost

  • 问题内容: 我有一个模态框窗口(弹出窗口),其中包含一个iframe, 并且在该 iframe中 有一个可滚动的 div 。 当我滚动iframe的内部DIV,并且达到其上限或下限时, 浏览器本身的窗口就会开始滚动。这是 不想要的行为 。 我已经尝试过类似的操作, 当鼠标进入弹出框区域时,该操作会在onMouseEnter时终止主窗口滚动: e.preventDefault()由于某些原因无法正常

  • 我正在IE上测试。单击后,我切换到子窗口,但无法返回父窗口,出现错误“窗口已关闭”。

  • 目前,我已经开始使用Selenium2.0/Web-Driver为我工作的公司进行自动化测试。 目前我已经开发了大约20个测试,但是当我运行这些测试时,它们会为每个测试打开一个新的浏览器窗口。 我在注册测试用例中运行它,然后 在第二个测试用例中运行,我认为应该将焦点放回第一个窗口。 我还使用关闭正在创建的其他窗口,但我希望它们一开始就不打开。

  • 问题内容: 寻找有关如何获得新的“弹出”窗口的帮助,该窗口在单击“登录”按钮后触发显示。 我能够到达显示窗口的时间,但是我不相信我当前用来获取窗口“句柄”的代码是否正常运行。我的情况有所不同,因为我在页面内使用量角器,但是出现的新窗口不是基于角度的,因此当我在该窗口中时,我必须切换为仅使用Selenium WebDriver。(任何人都不知道这种方法是否有问题?) 在下面,您可以找到我用来创建se