Using offsetHeight to force a redraw instead of setTimeout

Useful when changing CSS transitions

by robatwilliams

HTML

<div></div>

<button>Click!</button>

CSS

div {
    width: 100px;
    height: 100px;
    -webkit-transition: left 2s;
    position: absolute;
    top: 50px;
    background-color: red;
}

.noAnimate {
    -webkit-transition: none;
}
}

JavaScript

$('button').click(function () {
    var div = $('div');
    div.addClass('noAnimate').css('left', -100);
    
    // do this to force a redraw instead of setTimeout() !
    div[0].offsetHeight;
    div.removeClass('noAnimate').css('left', 0);
    
    //setTimeout(function () {
    //    div.removeClass('noAnimate').css('left', 0);
    //})
});