gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:53:53 27 4
gpt4 key购买 nike

我很困惑;我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com