2017-08-29 53 views
0

所以,我會解釋清楚,我想動畫一個列表,當我點擊文章例如,這隱藏所有其他的元素,只顯示所有相關的文章點擊Animate display block/none,with the comportement that

該內容相互替換比較在開始時是顯示塊/無比例。

但我不能動畫,所以如果你有解決方案,我把它們!

我不在乎動畫,我想了解原理。

感謝

+1

在juery有。淡入淡出(),幻燈片()和幻燈片(),但你也可以添加CSS自然動畫,有一個代碼,當你點擊一個元素,它隱藏了另一個元素淡入淡出 – bdalina

+0

在你的列表中你可以聽一個特定文章的點擊然後將其與其他文章的數組進行過濾(),以獲得您想要隱藏的文章列表。然後你可以用'display:none'應用'class'。 – csalmeida

+0

[Transitions on the display:property](https://stackoverflow.com/questions/3331353/transitions-on-the-display-property) – CBroe

回答

3

可以隱藏這些元件,使用jQuerybdalina建議,並表示只有被點擊的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

我忘了slideUp和slideDown在jQuery謝謝!但我還有一個問題,我的腳本已經運行了vanilla JS,該項目的第二個開發人員使用jQuery,我使用該函數,但對於您來說,使用vanilla和jQuery構建腳本是正確的。 在我的情況下,它只是這兩個函數,否則它只與香草 – Jonathan

+0

運行我明白[喬納森](https://stackoverflow.com/users/8180379/jonathan),如果這是你將有的唯一一點jQuery在這個項目上,你需要考慮是否值得在香草JS中重新創建效果,或者爲所有的應用動畫使用一個庫([GSAP](https://greensock.com/gsap)是非常好的)取決於你有多少時間。 如果你想保持簡單,你可以實現CSS動畫並使用['className'](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)方法來應用你認爲合適的課程。 讓我知道這是否有幫助! – csalmeida

+0

我使用另一個庫,但我無法解決該問題,如果您有時間,可以查看我的codepen以獲取一些信息:https://codepen.io/anon/pen/XayOJz – Jonathan

1

可悲的是,但blocknone之間的動畫是不可能的。

相反,您可以使用兩個步驟動畫opacity

下面是一個使用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

忘記了slideUp和slideDown在jQuery謝謝!但我還有一個問題,我的腳本已經運行了vanilla JS,該項目的第二個開發人員使用jQuery,我使用該函數,但對於您來說,使用vanilla和jQuery構建腳本是正確的。在我的情況下,只有這兩個功能,否則它只與香草 – Jonathan

+0

運行我不知道我是否正確理解你。你說你想了解這個原則。這裏是。如果你真的需要這個沒有jQuery寫的,我只是更新了我的答案。用純js重寫這種函數非常簡單,你可以自己做。我相信現在你可以用我的例子來處理逆向函數。 – voloshin

+0

在我的情況下,你的解決方案不起作用看我的代碼也許可以幫助你理解,當我有問題 https://codepen.io/anon/pen/XayOJz – Jonathan

相關問題