jQueryでは、.slideToggle()
と呼ばれるこのメソッドがあり、その高さとパディングに関係なく魔法のように上下にスライドします。私はそのライブラリを使わずに同じことを達成したいので、私は2つの実験を行いました:1つは高さを持つ要素を持ち、もう1つは高さが設定されていない要素があり、jQueryを使用せずに高さとパディングなしの要素をslide-togglingする
実験1(高さを有している):
document.querySelector('#experiment-1 > button').addEventListener('click', function() {
this.nextElementSibling.classList.toggle('slideToggle');
})
#experiment-1 > button {
display: block;
cursor: pointer;
}
#experiment-1 > .box {
background: #eee;
color: #aaa;
width: 200px;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
transition: all 3s linear;
}
#experiment-1 > .box.slideToggle {
height: 0;
padding: 0;
overflow: 0;
visibility: hidden;
}
<section id="experiment-1">
<button>Slide Toggle</button>
<div class="box">
<span>Experiment 1</span>
</div>
</section>
実験2(のみパディング):実験で
document.querySelector('#experiment-2 > button').addEventListener('click', function() {
this.nextElementSibling.classList.toggle('slideToggle');
})
#experiment-2 > button {
display: block;
cursor: pointer;
}
#experiment-2 > .box {
background: #eee;
color: #aaa;
display: inline-block;
padding: 5rem;
transition: all 3s linear;
}
#experiment-2 > .box.slideToggle {
padding: 0;
overflow: 0;
visibility: hidden;
}
<section id="experiment-2">
<button>Slide Toggle</button>
<div class="box">
<span>Experiment 2</span>
</div>
</section>
1私はそれがほぼ完璧だと思う、ボックスがほとんど閉じているとき、テキストはまだオーバーフローしている、私は3秒にそれをより明らかにするためにtrasitionの継続時間を設定します。
実験2では、唯一の問題はボックスが垂直ではなく斜めにスライドすることです。
jQueryを使用せずにこれらの2つを完全に動作させるにはどうすればよいですか?
おかげでたくさんのように上部と下部のパディングをNLY :) –