当前位置:首页 > JavaScript

js实现风车

2026-04-05 08:31:10JavaScript

实现风车动画的JavaScript方法

使用CSS动画结合JavaScript动态控制,可以创建一个旋转的风车效果。以下是实现步骤:

HTML结构

js实现风车

<div class="windmill">
  <div class="blades"></div>
  <div class="center"></div>
</div>

CSS样式

.windmill {
  position: relative;
  width: 200px;
  height: 200px;
}

.blades {
  width: 100%;
  height: 100%;
  background: transparent;
  position: absolute;
  animation: spin 5s linear infinite;
}

.center {
  position: absolute;
  width: 20px;
  height: 20px;
  background: #333;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

JavaScript控制

js实现风车

// 动态创建风车叶片
const blades = document.querySelector('.blades');
for (let i = 0; i < 4; i++) {
  const blade = document.createElement('div');
  blade.className = 'blade';
  blade.style.transform = `rotate(${i * 90}deg)`;
  blades.appendChild(blade);
}

// 添加叶片样式
const style = document.createElement('style');
style.textContent = `
  .blade {
    position: absolute;
    width: 80px;
    height: 30px;
    background: red;
    top: 50%;
    left: 50%;
    transform-origin: left center;
    border-radius: 15px;
  }
`;
document.head.appendChild(style);

使用Canvas实现风车

通过Canvas绘图API可以创建更灵活的风车动画:

const canvas = document.createElement('canvas');
canvas.width = 300;
canvas.height = 300;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
let angle = 0;

function drawWindmill() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 绘制中心点
  ctx.fillStyle = '#333';
  ctx.beginPath();
  ctx.arc(150, 150, 10, 0, Math.PI * 2);
  ctx.fill();

  // 绘制叶片
  ctx.save();
  ctx.translate(150, 150);
  ctx.rotate(angle);

  for (let i = 0; i < 4; i++) {
    ctx.save();
    ctx.rotate(i * Math.PI / 2);
    ctx.fillStyle = `hsl(${i * 90}, 80%, 50%)`;
    ctx.beginPath();
    ctx.moveTo(0, 0);
    ctx.lineTo(80, -15);
    ctx.lineTo(80, 15);
    ctx.closePath();
    ctx.fill();
    ctx.restore();
  }

  ctx.restore();

  angle += 0.02;
  requestAnimationFrame(drawWindmill);
}

drawWindmill();

响应式风车实现

添加鼠标交互控制风车转速:

let speed = 0.02;
document.addEventListener('mousemove', (e) => {
  speed = (e.clientX / window.innerWidth) * 0.1;
});

function drawInteractiveWindmill() {
  // ...之前的绘制代码...
  angle += speed;
  requestAnimationFrame(drawInteractiveWindmill);
}

这些方法提供了从简单到进阶的风车实现方案,可根据需求选择CSS动画或Canvas绘图方式。CSS方案适合简单场景,Canvas方案则提供更多自定义和控制选项。

标签: 风车js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…