使用jQuery的CSS3转换事件监听器

时间:2012-07-01 17:30:22

标签: jquery events css3 css-transitions event-listener

我正在对文章元素实现CSS3过渡效果,但事件侦听器 transitionend 仅适用于纯JavaScript,而不适用于jQuery。

见下面的例子:

// this works
this.parentNode.addEventListener( 'transitionend', function() {alert("1"); }, true);

// this does not work
$(this).parent().addEventListener( 'transitionend', function() {alert("1"); }, true);

有人可以解释一下我做错了什么吗?

4 个答案:

答案 0 :(得分:23)

另请注意,如果您在元素上运行多个过渡(例如,不透明度和宽度),则会获得多个transitionEnd回调。

如果您使用jQuery将事件绑定到div的转换端,您可能需要考虑使用one()函数。

$(this).parent().one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend", function() {
    // your code when the transition has finished
});

这意味着代码只会在第一次触发。因此,如果您在同一元素上发生了四次不同的转换,则您的回调只会触发一次。

答案 1 :(得分:20)

在jQuery中,您应该使用bind()on()方法:

$(this).parent().bind( 'transitionend', function() {alert("1"); });

答案 2 :(得分:4)

this.parentNode返回一个javascript对象。它有一个属性.addEventListener $(this).parent()返回一个jQuery对象。它没有属性.addEventListener

试试这个,

$(this).parent().on('webkitTransitionEnd oTransitionEnd transitionend msTransitionEnd', function() {
    alert("1");
})

答案 3 :(得分:1)

如果第一个确实有效(我怀疑它,因为它应该需要供应商前缀),那么这也应该有效:

$(this).parent().on('transitionend', function() {
    alert("1");
});