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

如何创建带有此类显露动画效果的滑块组件?

实现滑块拖动显露内容的效果

你要的是拖动滑块时逐步揭开下方完整内容的效果,下面是一个纯前端的实现方案,直接可以复用:

实现思路

核心是用遮罩层+裁剪路径(clip-path):遮罩层覆盖在完整内容上方,拖动滑块时动态调整遮罩的裁剪范围,让右侧内容逐步显露出来。

HTML结构

<div class="slider-container">
  <!-- 下方的完整内容 -->
  <div class="content-full">这里放你要展示的完整内容,比如图片、文字都可以</div>
  <!-- 遮罩层,上面放滑块 -->
  <div class="content-masked">
    <div class="slider">
      <span class="slider-handle">☰</span>
    </div>
  </div>
</div>

CSS样式

.slider-container {
  position: relative;
  width: 400px; /* 可根据需求调整 */
  height: 250px;
  overflow: hidden;
  border: 2px solid #eee;
}

.content-full {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: #f8f8f8;
  /* 如果是图片的话,换成背景图或者img标签 */
  /* background: url('你的图片地址') center/cover; */
}

.content-masked {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #fff; /* 遮罩的背景色,和页面背景统一即可 */
  clip-path: inset(0 0 0 0); /* 初始完全覆盖 */
  transition: clip-path 0.1s ease; /* 拖动时的平滑过渡 */
}

.slider {
  position: absolute;
  top: 0;
  left: 0;
  width: 50px;
  height: 100%;
  background: #34495e;
  cursor: ew-resize;
  display: flex;
  align-items: center;
  justify-content: center;
  user-select: none; /* 防止拖动时选中文字 */
}

.slider-handle {
  color: #fff;
  font-size: 22px;
}

JavaScript交互

const slider = document.querySelector('.slider');
const maskedContent = document.querySelector('.content-masked');
const container = document.querySelector('.slider-container');
let isDragging = false;

// 监听鼠标按下,开始拖动
slider.addEventListener('mousedown', (e) => {
  isDragging = true;
  e.preventDefault(); // 防止默认选中文本的行为
});

// 监听鼠标移动,调整滑块位置和遮罩范围
document.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  
  const containerRect = container.getBoundingClientRect();
  // 计算滑块的左侧位置,限制在容器内部,避免超出边界
  let sliderLeft = e.clientX - containerRect.left - slider.offsetWidth / 2;
  sliderLeft = Math.max(0, Math.min(sliderLeft, containerRect.width - slider.offsetWidth));
  
  // 更新滑块位置
  slider.style.left = `${sliderLeft}px`;
  // 更新遮罩的裁剪路径,滑块右侧的区域不再被遮罩覆盖
  maskedContent.style.clipPath = `inset(0 0 0 ${sliderLeft + slider.offsetWidth}px)`;
});

// 监听鼠标松开,结束拖动
document.addEventListener('mouseup', () => {
  isDragging = false;
});

注意事项

  • 如果要展示图片,把.content-full换成img标签或者背景图即可,效果完全一致
  • 可以根据需求调整滑块的样式、容器的尺寸,以及过渡动画的速度
  • 还可以添加触摸事件监听,适配移动端的拖动操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:25:24