2017-08-29 59 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

相关问题