当前位置:首页 > 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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

vue实现效果

vue实现效果

Vue 实现常见效果的方法 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现表单元素与数据的双向绑定。例如输入框与数据的实时同步: <input v-model=…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js 实现分页

js 实现分页

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

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…