当前位置:首页 > JavaScript

js实现百叶窗

2026-04-03 19:40:20JavaScript

实现百叶窗效果的 JavaScript 方法

百叶窗效果可以通过动态调整多个水平或垂直条带的透明度或高度来实现。以下是使用纯 JavaScript 和 CSS 创建百叶窗效果的步骤:

HTML 结构

<div id="blinds-container">
  <div class="blind"></div>
  <div class="blind"></div>
  <div class="blind"></div>
  <!-- 更多条带... -->
</div>

CSS 样式

#blinds-container {
  position: relative;
  width: 600px;
  height: 400px;
  overflow: hidden;
}

.blind {
  position: absolute;
  width: 100%;
  height: 40px; /* 每条高度 */
  background-color: #333;
  transform-origin: top;
  transition: transform 0.5s ease;
}

JavaScript 实现

const container = document.getElementById('blinds-container');
const blindCount = 10; // 条带数量
const duration = 1000; // 动画持续时间(ms)

// 创建条带
for (let i = 0; i < blindCount; i++) {
  const blind = document.createElement('div');
  blind.className = 'blind';
  blind.style.top = `${(i * container.offsetHeight) / blindCount}px`;
  blind.style.height = `${container.offsetHeight / blindCount}px`;
  container.appendChild(blind);
}

// 动画函数
function animateBlinds() {
  const blinds = document.querySelectorAll('.blind');
  blinds.forEach((blind, index) => {
    setTimeout(() => {
      blind.style.transform = 'scaleY(0)';
    }, (index * duration) / blinds.length);
  });
}

// 重置函数
function resetBlinds() {
  const blinds = document.querySelectorAll('.blind');
  blinds.forEach(blind => {
    blind.style.transform = 'scaleY(1)';
  });
}

// 点击触发动画
container.addEventListener('click', () => {
  resetBlinds();
  setTimeout(animateBlinds, 300);
});

替代实现方法(使用 CSS 动画)

@keyframes blindAnimation {
  0% { transform: scaleY(1); }
  100% { transform: scaleY(0); }
}

.blind {
  animation: blindAnimation 1s forwards;
  animation-delay: calc(var(--index) * 0.1s);
}
// 设置CSS变量
document.querySelectorAll('.blind').forEach((blind, index) => {
  blind.style.setProperty('--index', index);
});

水平百叶窗变体

要实现水平方向的百叶窗效果,只需修改 CSS:

.blind {
  width: 40px; /* 每条宽度 */
  height: 100%;
  transform-origin: left;
  transform: scaleX(1);
}

然后修改 JavaScript 中的 transform 为 scaleX(0)

js实现百叶窗

性能优化建议

  1. 使用 will-change: transform 提升动画性能
  2. 对于复杂场景,考虑使用 CSS clip-path 替代 transform
  3. 使用 requestAnimationFrame 实现更流畅的动画
  4. 避免在动画期间触发重排操作

这些方法可以创建从简单到复杂的百叶窗效果,根据实际需求调整条带数量、动画时间和方向等参数。

标签: 百叶窗js
分享给朋友:

相关文章

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…