有没有办法忽略某些基于 css 属性的转换结束事件

Is there a way to ignore certain transitionend events based on css property?

本文关键字:属性 css 转换 事件 结束 有没有      更新时间:2023-09-26

有没有办法忽略某些基于css属性的过渡结束事件?例如,在下面的代码中,高度过渡比左过渡早得多。有没有办法忽略高度过渡来获取最后一个过渡结束事件?

.html:

<div id="testButton"></div>
<div id="wrapper" class="wrapper">
    <div id="menu" class="menu">
        <div id="menu-sets" class="menu-sets">
        </div>
    </div>
</div>

.css:

#testButton {
    position: absolute;
    top: 0;
    left: 200px;
    width: 100px;
    height: 100px;
    background-color: #00ff00;
}
.menu-sets {
    position: absolute;
    visibility: hidden;
    overflow: hidden;
    top: 0;
    left: -50px;
    z-index: 100;
    width: 100px;
    height: 100px;
    background-color: #ff0000;
    transition: left 3.3s ease-out, height 0.2s ease-out;
}
.show-menu-1 .menu-sets {
    visibility: visible;
    left: 0px;
    height: 200px;
}

.js:

$(document).ready(function () {
    $("#testButton").click(
        function () {
            $('#wrapper').addClass('show-menu-1'); // show menu
        }
    );
    $('#menu-sets').one('transitionend', function() { 
        alert("event done");
    });
});

JSFIDDLE 示例:

http://jsfiddle.net/rotaercz/zysxsc41/2/

当然,原始事件包含有关正在转换的属性的信息

$('#menu-sets').on('transitionend', function(event) { 
    if ( event.originalEvent.propertyName === 'left' ) {
        alert('done');
        $('#menu-sets').off('transitionend');
    }
});

由于one()只触发一次,因此您必须使用 on() 并取消绑定

小提琴