Substituição de CSS3 para jQuery.fadeIn e fadeOut

Eu escrevi uma pequena quantidade de código para tentar replicar o jQuery.fadeIn() e.fadeOut() funções usando transições CSS para ter uma aparência melhor em dispositivos de toque.

Idealmente, gostaria de evitar o uso de uma biblioteca para poder escrever exatamente o que eu quero e como um exercício de aprendizado.

fadeOut funciona bem.

A ideia defadeIn é usar transições CSS3 para ajustar a opacidade de um elemento, após o qual o elemento será definido comodisplay:block; (usandois-hidden para garantir que ele ainda não esteja clicável ou que cubra algo abaixo dele.

fadeIn não está funcionando embora. Eu acho que é devido a adicionar ois-animating classe ao mesmo tempo como remover ois-hiding classe. O evento transitionEnd nunca é acionado porque uma transição não ocorre:

function fadeIn (elem, fn) {
  var $elem = $(elem);

  $elem.addClass('is-animating');
  $elem.removeClass('is-hidden');
  $elem.removeClass('is-hiding');

  $elem.on(transitionEndEvent, function () {

    $elem.removeClass('is-animating');

    if (typeof fn === 'function') {
      fn(); 
    }
  });
}; 

E o CSS

.is-animating {
  @include transition(all 2000ms);
}

.is-hiding {
  // Will transition
  @include opacity(0);
}

.is-hidden {
  // Won't transition
  display: none;
}

Aqui está o código:Link CodePen

Update: Eu encontrei o que eu descreveria como um hack, mas isso funciona muito bem:Substituição de CSS3 para jQuery.fadeIn e fadeOut

Código de trabalho após essa correção:Fixo

Uma solução semsetTimeout seria muito valioso embora.

questionAnswers(4)

yourAnswerToTheQuestion