2017-08-29 6 views
0

私は明確に説明します。私はリストをアニメーションしたいと思います。たとえば記事をクリックすると、他のすべての要素が隠され、クリックアニメーション表示ブロック/なし、そのコンビネーションで

この内容は、最初に表示ブロック/なしの比較で比較されます。

しかし、私はそれらを取るソリューションを持っている場合、私はこれをアニメーションすることはできません!

私はアニメーションについて気にしない、私は原則を理解したい。

は悲しいこと

+1

ジュリーにはありますか?fade()、slideUp()、slide()などがありますが、CSSの自然なアニメーションを追加することもできます。ある要素をクリックするとコードが消えて他の要素が消えます – bdalina

+0

あなたのリストでは、隠したい記事のリストを取得するために他の記事との配列に対して 'filter()'を実行します。それで 'display:none'で' class'を適用することができます。 – csalmeida

+0

[ディスプレイ上のトランジション:プロパティ](https://stackoverflow.com/questions/3331353/transitions-on-the-display-property)の可能な複製 – CBroe

答えて

3

あなたはbdalinaようjQueryを使用して要素を隠すことができが提案され、クリックされただけarticleを示しました。同様

// Hides all articles but the one clicked. 
 
$('article').click(function(){ 
 
\t $('article').slideUp(); 
 
    $(this).slideDown(); 
 
});
body { 
 
    font-family: sans-serif; 
 
    background: #003B93; 
 
} 
 

 
section { 
 
    width: 200px; 
 
    margin: 20px auto; 
 
} 
 

 
article { 
 
    cursor: pointer; 
 
    margin-bottom: 20px; 
 
    text-align: center; 
 
    background: #BABABA; 
 
    box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2); 
 
    width: 150px; 
 
    padding: 20px; 
 
    border-radius: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<section> 
 
    <article>First article.</article> 
 
    <article>Second article.</article> 
 
    <article>Third article.</article> 
 
    <article>Fourth article.</article> 
 
    <article>Fifth article.</article> 
 
</section>

くださいhave a look at this answer、それは問題に別のアプローチを示しています。

これは何らかの形で役立ちます。

+0

jQueryのslideUpとslideDownを忘れてしまいました!しかし、別の質問があります。私のスクリプトはすでにバニラJSで実行されています。そのプロジェクトの2番目の開発者はjQueryで動作しますが、私はその機能を使用しますが、バニラとjQueryでスクリプトを構築するのは正しいです。 私の場合は、これ以外に2つしかありません。それ以外はバニラでしか実行されません。 – Jonathan

+0

jQueryの唯一のビットであれば[Jonathan](https://stackoverflow.com/users/8180379/jonathan)プロジェクトでは、バニラJSの効果を再現する価値があるかどうか、またはすべてのアプリのアニメーション([GSAP](https://greensock.com/gsap)は本当に良いものです)にライブラリを使用するかどうかを検討する必要があります。あなたがどれくらいの時間を持っているかによって。 CSSアニメーションを実装し、['className'](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)メソッドを使って簡単に適用したい場合は、あなたが合っていると思うようなクラス。 それが手伝ってくれたら教えてください! – csalmeida

+0

私は別のlibを使用していますが、私はその問題を解決できません。時間があれば、私のcodepenでいくつかの情報を確認できます:https://codepen.io/anon/pen/XayOJz – Jonathan

1

ありがとうございますが、blocknone間のアニメーションは不可能です。

代わりに、opacityという2つのステップのアニメーションを使用できます。

ここでは、CSSバイアスを使用した例を示します。

HTML:

... 
<div class="block opacity hidden">...</div> 
... 

CSS(transitionを追加することを忘れないでください):

.block { 
    display: block; 
    opacity: 1; 
} 

.block.opacity { 
    opacity: 0; 
} 

.block.hidden { 
    display: none; 
} 

のjQuery:

$('.block').removeClass('hidden'); // the block is still invisible 
setTimeout(function() { 
    $('.block').removeClass('opacity'); // now the block is visible 
}, 100); // small delay is needed, better if it's equal the transition time 

それは簡単です。代わりに.fadeIn().fadeOut()メソッドまたは.animate()を使用することができます。あなたが逆の機能でそのタイムアウトを覚えておく必要があります

UPD

transitionの期間に等しいために、または要素は、アニメーションの終了前に非表示になります持っています。

$('.block').addClass('opacity'); 
setTimeout(function() { 
    $('.block').addClass('hidden'); 
}, 100); 

UPD2

JS:

var el = document.getElementsByClassName('block'); 
el.classList.remove('hidden'); 
setTimeout(function() { 
    el.classList.remove('opacity'); 
}, 100); 
+0

jQueryのslideUpとslideDownを忘れてしまいました!しかし、別の質問があります。私のスクリプトはすでにバニラJSで実行されています。そのプロジェクトの2番目の開発者はjQueryで動作しますが、私はその機能を使用しますが、バニラとjQueryでスクリプトを構築するのは正しいです。私の場合は、これらの2つの機能のみがバニラで実行されています – Jonathan

+0

私はあなたを正しく理解しているかわかりません。あなたはその原則を理解したいと言いました。ここにあります。 jQueryを使わずに書いたことが本当に必要な場合は、私の答えを更新しました。純粋なjを使用してその種の関数を書き直すことは非常に簡単です。あなた自身で行うことができます。私は今、私の例を使って逆関数を扱うことができると信じています。 – voloshin

+0

私の場合、あなたの解決策はうまくいかず、私のコードはおそらく私が持っているときにその問題を理解する助けになります https://codepen.io/anon/pen/XayOJz – Jonathan

関連する問題