You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使第二个Div在父级row范围内完成滑动切换动画?

解决方法

想让第二个Div只在父级row容器内滑动、不超出边界?只要做两个关键调整就行:

1. 给row加溢出隐藏属性

这是最核心的一步——给.row添上overflow: hidden,这样任何超出row范围的内容都会被自动裁掉,不会露在容器外面。修改CSS里的row样式:

.row {
  border: 1px solid black;
  width: 500px;
  overflow: hidden; /* 新增:隐藏溢出的内容 */
}

2. 调整动画位移逻辑(优化效果可选)

原来的动画用translateX(100%)是基于元素自身宽度的位移,切换col类时元素宽度会变,容易导致滑动位置不对。可以根据row内的栅格比例调整位移值:

  • 当secondDiv从占满整行(col-lg-12)切换到占7格(col-lg-7)时,需要向左滑动让出firstDiv的5格空间,修改slide-out动画:
@keyframes slide-out {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-calc(5/12 * 100%)); /* 向左移动firstDiv的宽度比例 */
  }
}
  • 切换回整行时,让secondDiv向右滑动填满空间,修改slide-in动画:
@keyframes slide-in {
  from {
    transform: translateX(-calc(5/12 * 100%));
  }
  to {
    transform: translateX(0);
  }
}

完整修改后的代码

JavaScript

function test(event) {
  var checkbox = document.getElementById('toggle');
  var firstDiv = document.getElementById('firstDiv');
  var secondDiv = document.getElementById('secondDiv');

  if (checkbox.checked) {
    secondDiv.classList.remove('col-lg-12')
    secondDiv.classList.remove('slide-in');
    secondDiv.classList.add('col-lg-7')
    secondDiv.classList.add('slide-out');
    secondDiv.addEventListener('animationend', function() {
      firstDiv.style.display = 'block';
    }, {
      once: true
    });
  } else {
    firstDiv.style.display = 'none';
    secondDiv.classList.remove('slide-out');
    secondDiv.classList.remove('col-lg-7')
    secondDiv.classList.add('col-lg-12')
    secondDiv.classList.add('slide-in');
  }
}

CSS

.slide-in {
  animation: slide-in 3s forwards;
}

.slide-out {
  animation: slide-out 3s forwards;
}

@keyframes slide-in {
  from {
    transform: translateX(-calc(5/12 * 100%));
  }
  to {
    transform: translateX(0);
  }
}

@keyframes slide-out {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-calc(5/12 * 100%));
  }
}

.row {
  border: 1px solid black;
  width: 500px;
  overflow: hidden; /* 新增溢出隐藏 */
}

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<div class="row">
  <div id="firstDiv" style="background-color:palegreen; display:none" class="col-lg-5">first</div>
  <div id="secondDiv" style="background-color:yellow" class="col-lg-12">Second</div>
</div>
<div>
  <input type="checkbox" id="toggle" onchange="test(event)">
  <label for="toggle">Toggle Animation</label>
</div>

(注:这里调整了初始状态,让firstDiv默认隐藏、checkbox默认未勾选,逻辑更通顺)

为啥这么改?

  • overflow: hidden是解决超出边界的根本,它把row变成一个“裁剪框”,只显示框内的内容。
  • 调整位移值是为了让滑动刚好匹配栅格的宽度比例,整个动画过程都在row内部完成,不会出现元素跑到容器外面的情况。

内容的提问来源于stack exchange,提问作者user547534

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:02:16