transitionend 使用 if 语句触发 +1 事件

transitionend firing +1 event with if statement

我有一个 if 语句来检查一个元素是否有 style attr。如果 style 属性不存在,它会添加一些内联样式。如果存在,则将其删除。我使用带有添加的样式的过渡。

我想在 transition 通过 transitionend 结束后执行 //something,但我面临的问题是每次对该元素的后续点击都会产生另一个 transitionend 事件.

我制作了一个 fiddle 来描述这种行为。

如有任何帮助,我们将不胜感激。

问题是每次单击按钮都会添加一个新的 transitionEnd 事件处理程序,您可以在单击处理程序之外使用单个处理程序

$('button').on('click', function () {

    var inStyle = $('.box').attr('style')

    if (typeof inStyle !== typeof undefined && inStyle !== false) {
        $('.box').removeAttr("style");
    } else {
        $('.box').css('border-color', 'blue');
    }

});
var transEnd = 'transitionend webkitTransitionEnd oTransitionEnd'
$('.box').on(transEnd, function (e) {
    console.log(e.type, e.originalEvent.propertyName, e)
});

另一种选择是使用.one()注册一个处理程序,它只会被触发一次,如

$('button').on('click', function () {

    var inStyle = $('.box').attr('style')
    var transEnd = 'transitionend webkitTransitionEnd oTransitionEnd'

    if (typeof inStyle !== typeof undefined && inStyle !== false) {
        $('.box').removeAttr("style");
    } else {
        $('.box').css('border-color', 'blue');
    }

    $('.box').one(transEnd, function (e) {
        alert('transition ended');
    });

});

先解绑再设置

$('.box').unbind(transEnd);

这大大减少了警报

之前:显示的越来越多

之后:每次只显示3-4个