疑似要素をjQueryでアニメーションさせようとして少し詰まったのでメモしておきます。
うまくいかなかった場合
疑似要素にjQueryのanimate()を指定してみます。
HTML
<div class="sample"></div> <button id="btn">表示</button>
CSS
.sample:before {
content: '';
display: block;
width: 50px;
height: 50px;
background: #000000;
opacity: 0;
}
JavaScript
$(function() {
$('#btn').on('click', function() {
$('.sample:before').animate({
opacity: 1
}, 500);
});
});
これでいけるかと思ったのですが、疑似要素はDOM要素ではないので操作することができませんでした。
うまくいかなかった場合のデモページ
対応方法
CSSにアニメーションを用意して、JavaScriptではclassを付与するのみにして対応しました。
CSS
.sample:before {
content: '';
display: block;
width: 50px;
height: 50px;
background: #000000;
opacity: 0;
-webkit-transition: opacity 500ms;
transition: opacity 500ms;
}
.sample.is-show:before {
opacity: 1;
}
JavaScript
$(function() {
$('#btn').on('click', function() {
$('.sample').addClass('is-show');
});
});
CSSを変更できない場合、JavaScriptでstyle要素を追加する形でも対応できました。
JavaScript
$(function() {
$('#btn').on('click', function() {
$('head').append('<style>.sample:before {-webkit-transition: opacity 500ms;transition: opacity 500ms;opacity: 1;}</style>');
});
});
【参考サイト】
コメントが承認されるまで時間がかかります。