如何创建带有此类显露动画效果的滑块组件?
实现滑块拖动显露内容的效果
你要的是拖动滑块时逐步揭开下方完整内容的效果,下面是一个纯前端的实现方案,直接可以复用:
实现思路
核心是用遮罩层+裁剪路径(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
相关产品推荐
相关产品推荐

