我想在没有内容动画的 div 上使用 jQuery 方法 .slideToggle,但我似乎无法让它工作。当我在其上使用 div 时,.slideToggle 中的所有元素都会移动,包括箭头(我不想移动)。请查看我的 fiddle https://jsfiddle.net/ch4jmqz8/

这是我正在使用的 JS 代码:

$('#tgl').on('click', function () {
    $('.toggled_div').slideToggle();
});

CSS:
.toggled_div {
    background: #3597FF;
    padding: 15px;
    width: 300px;
    margin-top: 20px;
}
.toggled_div:before {
        content: '';
    position: absolute;
    left: 20px;
    margin-top: -34px;
    border: 10px solid transparent;
    border-bottom-color: #3597FF;
}
.toggled_div div {
  background: #ddd;
  padding: 10px;
  margin: 10px;
}

最佳答案

好的,这是一个纯 CSS 解决方案,我们可以使用 div#tgl 的伪选择器 :checked 代替 checkbox ,我们还需要使用 display:none 隐藏复选框并依靠单击其 label for="" 来切换转换。

由于隐藏的 checkbox 通过其 checked 获得 label 状态,因此将应用此 #toggle:checked ~ .slider 条件,我们将 max-height 属性更改为 200px 而不是其原始值 0 ,而此属性将受此 transition: all 1s; 影响

由于过渡线对 max-height 属性进行动画处理,overflow: hidden 中该 .slider 的规则将随着过渡后的 max-height 值的变化而显示内容,当 checkbocx 状态变为 unchecked 时,上述相同。

JS Fiddle

.toggled_div {
  background: #3597FF;
  width: 300px;
  margin-top: 20px;
  padding: 15px;
}
.toggled_div:before {
  content: '';
  position: absolute;
  left: 20px;
  top: 0;
  border: 10px solid transparent;
  border-bottom-color: #3597FF;
}
.slider {
  width: 300px;
  max-height: 0;
  overflow: hidden;
  position: relative;
  -webkit-transition: all 1s;
  transition: all 1s;
}
#toggle {
  display: none;
}
label[for="toggle"] {
  cursor: pointer;
}
#toggle:checked ~ .slider {
  max-height: 200px;
}
<input id="toggle" type="checkbox">
<label for="toggle">toggle</label>
<div class="slider">
  <div class="toggled_div">
    some text here
    <br>some text here
    <br>some text here
    <br>some text here
    <br>some text here
    <br>
  </div>
</div>

关于没有元素动画的jQuery slideToggle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34530363/

10-13 02:15