当前位置:首页 > JavaScript

js实现旋转效果

2026-04-04 06:39:07JavaScript

使用 CSS transform 实现旋转

通过 CSS 的 transform 属性配合 rotate() 函数可以轻松实现旋转效果。JavaScript 主要用于动态控制旋转角度。

// 获取目标元素
const element = document.getElementById('rotateTarget');

// 设置初始旋转角度
let angle = 0;

// 每帧增加旋转角度
function rotate() {
  angle += 1;
  element.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(rotate);
}

// 启动旋转
rotate();

使用 CSS animation 实现自动旋转

通过 CSS 关键帧动画实现更流畅的旋转效果,JavaScript 只需添加/移除类名控制动画启停。

js实现旋转效果

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

.spin {
  animation: spinning 2s linear infinite;
}
const element = document.getElementById('rotateTarget');

// 开始旋转
element.classList.add('spin');

// 停止旋转
element.classList.remove('spin');

三维空间旋转

使用 rotateX(), rotateY(), rotateZ() 实现三维旋转效果,需设置 transform-style: preserve-3d

js实现旋转效果

const cube = document.getElementById('3dCube');
let x = 0, y = 0;

function animate() {
  x += 0.5;
  y += 0.5;
  cube.style.transform = `rotateX(${x}deg) rotateY(${y}deg)`;
  requestAnimationFrame(animate);
}

animate();

拖拽交互旋转

通过鼠标事件实现拖拽控制旋转角度,适合图片查看器等场景。

const rotatable = document.getElementById('rotatable');
let isDragging = false;
let startAngle = 0;
let currentAngle = 0;

rotatable.addEventListener('mousedown', (e) => {
  isDragging = true;
  startAngle = getAngle(e.clientX, e.clientY);
});

window.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  const angle = getAngle(e.clientX, e.clientY);
  currentAngle += angle - startAngle;
  rotatable.style.transform = `rotate(${currentAngle}deg)`;
  startAngle = angle;
});

window.addEventListener('mouseup', () => {
  isDragging = false;
});

function getAngle(x, y) {
  const rect = rotatable.getBoundingClientRect();
  const cx = rect.left + rect.width/2;
  const cy = rect.top + rect.height/2;
  return Math.atan2(y - cy, x - cx) * 180 / Math.PI;
}

性能优化建议

对于复杂旋转场景,使用 will-change: transform 提升性能 考虑使用 WebGL 的 Three.js 库实现高性能 3D 旋转 避免频繁的重排重绘,尽量使用 transformopacity 属性

.optimized-rotate {
  will-change: transform;
  backface-visibility: hidden;
}

标签: 效果js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…