javascript - 运行函数 onscroll,除非父类在 Javascript 中有类

标签 javascript

我很困惑;我有一个 window.onscroll = function() { .. }效果很好,除了某些情况。在这些情况下,<html>元素具有两个特定类之一。所以这看起来很容易;不要运行 onscroll如果这些类中的任何一个存在。但是,怎么办?

大致上,我已经设置好了;

if (!html.classList.contains('firstClass') && !html.classList.contains('secondClass')) { 
   window.onscroll = function() { ... }
}

但是 onscroll函数每次都运行。我也试过把 if onscroll 里面的语句,但没有运气。 现在我不确定 if 的标记是否说法正确。所以我也尝试了一种更简单的方式,其中语句始终为真或假;

if (html.classList.contains('thirdclass') { }

在这个例子中,代码要么运行要么不运行,不管类是被添加还是删除。这可能与 DOM 的工作方式有关,而 html元素可能没有被拾取?

我不确定 if 中的标记是否陈述甚至是正确的;我在此找到的所有资源都使用 jQuery,但没有一个明确说明如何运行 if (element has one of either two class classes) {} .

谁能帮我走上正轨?

编辑: 好吧,把我打傻。我设置了一个 jsfiddle演示,但它确实按预期工作(!)。这让我认为它与运行此代码的生态系统有关(Magento 2 前端)。也许js是如何初始化的? (是的,我确实需要悲伤地调用 jquery);

define([
    "jquery"
  ], 
  function($) {
    "use strict";
    // code here
});

难道是这样吗?

最佳答案

根据你的描述,我猜你的html标签最初没有类 firstClasssecondClass .

所以,这里的问题是您正在向 onscroll 注册一个事件监听器。事件仅当 html元素没有类 firstClasssecondClass .最初它是真的(因为最初 html 元素没有类所需的类),它将注册事件监听器并且它总是会在您滚动时触发。

此外,如果类最初是 firstClass,您的代码将永远不会触发事件监听器。和 secondClass .

现在,为了实现您的目标,您需要更改的是添加 if onclick 里面的语句听众而不是外部。

代码如下:

window.onscroll = function () {
    if (!html.classList.contains('firstClass') && !html.classList.contains('secondClass')) { 
        // Do stuff
    }
};

上面的代码所做的是,不管html是什么类,它都会先注册事件监听器。元素。但是它会执行if里面的代码仅当 html 时才阻止元素没有这两个类。那么,您的目标就在这里实现了。

希望这有帮助:)

关于javascript - 运行函数 onscroll,除非父类在 Javascript 中有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57664922/

相关文章:

javascript - 使用javascript替换数组中的连续性整数

javascript - 单击链接时,关注 svg 元素

php - 使用 Jquery 从字符串下载 pdf 文件

PHP、jQuery 和 Ajax 调用乱序

javascript - 如何在数据表中添加行?

javascript - 重置 React JS 的状态

javascript - 使用 javascript 填充下拉列表中的数组元素

javascript - 函数内的事件监听器存储在变量中

javascript - 如何从mongodb聚合中获取值

javascript - 使用js创建元素并添加过渡