JQuery:我如何被动地观察元素以查看 class 何时被删除?
JQuery: How do I passively watch an element to see when a class is removed?
我正在使用 Slick Slider (https://kenwheeler.github.io/slick/)。
我想隐藏上一个按钮,只在滑块advances/scrolls时显示。
我能想到的唯一方法是在从第一个幻灯片元素中删除 .slick-active
class 时使用上一个按钮 .fadeIn()
。但是,我不确定如何触发此事件。
我无法使用 .click()
功能,因为 Slick 允许您在移动设备上拖动。
有没有办法让我被动地“观察”一个元素,看看它是否有 class added/removed?
您可以使用 Mutation Observers.
这是一个例子:
var targetNode = document.querySelector('.red');
const config = {
attributes: true,
childList: true,
subtree: true
};
// Callback function to execute when mutations are observed
const callback = function(mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log('A child node has been added or removed.');
} else if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
setInterval(function() {
targetNode.classList.toggle("red");
}, 1000);
const observer = new MutationObserver(callback);
observer.observe(targetNode, config);
.red {
color: red;
}
<p class="red">red</p>
Prosy Arceno 的回答是正确的,但是我发现 Slick Slider 已经涵盖了像我这样的案例。
所以我需要做的就是:
// On after slide change
$('.js-slider').on('afterChange', function(event, slick, currentSlide, nextSlide){
$(".prevBtn").fadeIn();
});
我正在使用 Slick Slider (https://kenwheeler.github.io/slick/)。
我想隐藏上一个按钮,只在滑块advances/scrolls时显示。
我能想到的唯一方法是在从第一个幻灯片元素中删除 .slick-active
class 时使用上一个按钮 .fadeIn()
。但是,我不确定如何触发此事件。
我无法使用 .click()
功能,因为 Slick 允许您在移动设备上拖动。
有没有办法让我被动地“观察”一个元素,看看它是否有 class added/removed?
您可以使用 Mutation Observers.
这是一个例子:
var targetNode = document.querySelector('.red');
const config = {
attributes: true,
childList: true,
subtree: true
};
// Callback function to execute when mutations are observed
const callback = function(mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log('A child node has been added or removed.');
} else if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
setInterval(function() {
targetNode.classList.toggle("red");
}, 1000);
const observer = new MutationObserver(callback);
observer.observe(targetNode, config);
.red {
color: red;
}
<p class="red">red</p>
Prosy Arceno 的回答是正确的,但是我发现 Slick Slider 已经涵盖了像我这样的案例。
所以我需要做的就是:
// On after slide change
$('.js-slider').on('afterChange', function(event, slick, currentSlide, nextSlide){
$(".prevBtn").fadeIn();
});