我很困惑;我有一个 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
标签最初没有类 firstClass
和 secondClass
.
所以,这里的问题是您正在向 onscroll
注册一个事件监听器。事件仅当 html
元素没有类 firstClass
和 secondClass
.最初它是真的(因为最初 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/