2017-09-08 23 views
1

jQueryを使用してトランジションを実行する際に問題が発生します。
最初のトランジションが完了したら、他のdivをフェードインさせたいが、不透明度はトランジションを実行しない。それはopacity: 1;にまっすぐ行く。
私はsetTimeoutを回避することができましたが、私のコードか何かCSSトランジションがトランジション終了後に起動しない

var endTransition = "transitionend"; 
 

 
$('#test').click(function() { 
 
    $(this).css('opacity', '0').one(endTransition, function() { 
 
    $('#test').css('display', 'none'); 
 
    $('#test2').css('display', 'inline-block').css('opacity', '1'); 
 
    }); 
 
}); 
 

 
$('#test2').click(function() { 
 
    $(this).css('opacity', '0').one(endTransition, function() { 
 
    $('#test2').css('display', 'none'); 
 
    $('#test').css('display', 'inline-block').css('opacity', '1'); 
 
    }); 
 
});
#test { 
 
    display: inline-block; 
 
    background: red; 
 
    opacity: 1; 
 
    width: 200px; 
 
    height: 200px; 
 
    transition: opacity .5s ease; 
 
} 
 

 
#test2 { 
 
    background: blue; 
 
    display: none; 
 
    opacity: 0; 
 
    width: 200px; 
 
    height: 200px; 
 
    transition: opacity .5s ease; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='test'></div> 
 
<div id='test2'></div>

+0

( '表示'、 'インラインブロック')'を呼び出す前に、 '.css( 'opacity'、 '1')'です。これは、あなたの要素がCSSの 'display:inline-block'のために直ちに表示される理由です。 –

答えて

0

この試しに問題があります場合、私は思っていた:

var endTransition = "webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend"; 

$('#test').click(function() { 
    $(this).css('opacity',0).off().one(endTransition, function(e) { 
     // your callback 
    }); 
}); 
  • 使用はブラウザ間の互換性のために、より多くのブラウザ固有のイベント名。
  • off()を使用して、以前のすべてのイベントバインドを削除します。
  • 編集:.css('opacity','1')に電話する前に.css('display','inline-block')を持っていることに問題があるようです。それはあなたの要素がCSS display: inline-blockのためにすぐに現れている理由です。
2

ではなく、シンプルでエレガントなソリューション:あなたの問題はあなたが `の.css持っているようです

$('div').click(function() { 
 
    $(this).fadeOut(function() { 
 
    $('div').not(this).fadeIn().css("display","inline-block"); 
 
    }); 
 
});
#test { 
 
    display: inline-block; 
 
    background: red; 
 
    width: 200px; 
 
    height: 200px; 
 
} 
 

 
#test2 { 
 
    background: blue; 
 
    display: none; 
 
    width: 200px; 
 
    height: 200px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='test'></div> 
 
<div id='test2'></div>

+0

こんにちは。まず、助けてくれてありがとう。ですから、私は2番目のdivが 'display:inline-block;'である必要があります。これは私にとって大きな問題です。それを行う方法はありますか? –

+0

btw、アニメーションをCSSトランジションにしようとしています。私はWebアプリケーションを構築していますので、できるだけ滑らかなアニメーションを作成しようとしていますが、CSSトランジションはjQueryアニメーションよりもスムーズです。 –

+0

divを 'inline-block'にすると簡単に修正できます。これを上記のスニペットに追加しました。 CSSの遷移については、 'fadeIn()'と 'fadeOut()'は最後に 'display:none'を持つCSS不透明遷移ですが、jQueryを通してJavaScriptで制御されます。 jQueryの準備関数を使用すると、コードが短くてきれいになります。すべてjQueryが行います。 jQueryを使用しない場合は、不透明度を制御するための独自の関数を記述する必要があります。問題は、ブラウザがjQueryよりも高速、安全、ブラウザ間で互換性が向上するかどうかです。私は試したJS(そしてこの場合はjQuery)に固執します。 – Aydin4ik

関連する問題