当前位置:首页 > JavaScript

js实现风车

2026-03-02 07:26:50JavaScript

实现风车动画的步骤

使用HTML和CSS创建风车的基本结构,通过JavaScript控制旋转动画。

HTML结构

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

CSS样式

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

.blades {
  width: 100px;
  height: 100px;
  background-color: #f5f5f5;
  border-radius: 50%;
  position: absolute;
  top: 50px;
  left: 50px;
  transform-origin: center;
}

.tower {
  width: 20px;
  height: 200px;
  background-color: #333;
  position: absolute;
  bottom: 0;
  left: 90px;
}

JavaScript动画控制

const blades = document.querySelector('.blades');
let rotation = 0;

function rotateBlades() {
  rotation += 2;
  if (rotation >= 360) {
    rotation = 0;
  }
  blades.style.transform = `rotate(${rotation}deg)`;
  requestAnimationFrame(rotateBlades);
}

rotateBlades();

添加风车叶片细节

通过CSS伪元素为风车添加四个叶片。

.blades::before,
.blades::after,
.blades::first-child,
.blades::last-child {
  content: '';
  position: absolute;
  width: 100px;
  height: 20px;
  background-color: #ff9800;
  top: 40px;
  left: 0;
}

.blades::before {
  transform: rotate(0deg);
}

.blades::after {
  transform: rotate(90deg);
}

.blades::first-child {
  transform: rotate(45deg);
}

.blades::last-child {
  transform: rotate(135deg);
}

控制动画速度

通过修改JavaScript代码中的旋转增量来控制风车转速。

let speed = 1; // 调整这个值改变转速
rotation += speed;

响应式风车设计

添加媒体查询使风车在不同屏幕尺寸下保持比例。

@media (max-width: 600px) {
  .windmill {
    width: 100px;
    height: 150px;
  }

  .blades {
    width: 50px;
    height: 50px;
    top: 25px;
    left: 25px;
  }

  .tower {
    width: 10px;
    height: 100px;
    left: 45px;
  }
}

添加交互控制

通过事件监听器让用户控制风车启停。

const windmill = document.querySelector('.windmill');
let isRotating = true;

windmill.addEventListener('click', () => {
  isRotating = !isRotating;
  if (isRotating) {
    rotateBlades();
  }
});

修改旋转函数以响应停止状态:

js实现风车

function rotateBlades() {
  if (!isRotating) return;

  rotation += 2;
  blades.style.transform = `rotate(${rotation}deg)`;
  requestAnimationFrame(rotateBlades);
}

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

相关文章

js实现变形

js实现变形

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

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

vue实现js休眠

vue实现js休眠

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…