jQuery 在元素 class 更改时执行功能
jQuery perform function when element class changes
我已经设置了一个 swiper 滑块,并希望在它到达特定幻灯片时启动一个功能。这是我到目前为止所做的,但没有用:
// event listener
function addClassNameListener(elemId, callback) {
var elem = $(".swiper-home .swiper-slide:nth-child(2)");
var activeClassName = 'swiper-slide-active';
window.setInterval( function() {
var className = elem.className;
if (className == activeClassName) {
callback();
}
},10);
}
addClassNameListener("foo", function(){
$('.swiper-slide-active .count').each(function () {
//$('body').scrollTop($(this).parent.offset().top);
$(this).prop('Counter', 0).animate({
Counter: $(this).data().total
}, {
duration: $(this).data().seconds * 1000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});
alert("changed");
});
我设置了一个jsFiddle
实际上你做错了几件事。
您正在访问 elem
上的 className
,而它是 jquery 对象,而不是 dom 元素,因此它没有 属性.即使可以,它也会给所有 类 以空格分隔,所以你最好检查一下
elem.hasClass(activeClassName)
即便如此,无论幻灯片是否更改,您的回调函数都会每 10 毫秒执行一次
如果你查看你正在使用的刷卡库的api,你可以使用他们提供的。
例如在幻灯片更改事件上使用活动幻灯片:
var swiper = new Swiper('.swiper-container', {
onSlideChangeEnd: function(swiper) {
var $activeSlide = $(swiper.slides[swiper.activeIndex]);
//check if this slide is the one you are looking for
if ($activeSlide.attr('id') == elemId)
{
//do your stuff with the active slide
}
}
});
我已经设置了一个 swiper 滑块,并希望在它到达特定幻灯片时启动一个功能。这是我到目前为止所做的,但没有用:
// event listener
function addClassNameListener(elemId, callback) {
var elem = $(".swiper-home .swiper-slide:nth-child(2)");
var activeClassName = 'swiper-slide-active';
window.setInterval( function() {
var className = elem.className;
if (className == activeClassName) {
callback();
}
},10);
}
addClassNameListener("foo", function(){
$('.swiper-slide-active .count').each(function () {
//$('body').scrollTop($(this).parent.offset().top);
$(this).prop('Counter', 0).animate({
Counter: $(this).data().total
}, {
duration: $(this).data().seconds * 1000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});
alert("changed");
});
我设置了一个jsFiddle
实际上你做错了几件事。
您正在访问 elem
上的 className
,而它是 jquery 对象,而不是 dom 元素,因此它没有 属性.即使可以,它也会给所有 类 以空格分隔,所以你最好检查一下
elem.hasClass(activeClassName)
即便如此,无论幻灯片是否更改,您的回调函数都会每 10 毫秒执行一次
如果你查看你正在使用的刷卡库的api,你可以使用他们提供的。
例如在幻灯片更改事件上使用活动幻灯片:
var swiper = new Swiper('.swiper-container', {
onSlideChangeEnd: function(swiper) {
var $activeSlide = $(swiper.slides[swiper.activeIndex]);
//check if this slide is the one you are looking for
if ($activeSlide.attr('id') == elemId)
{
//do your stuff with the active slide
}
}
});