当前位置:首页 > JavaScript

js 实现角度旋转

2026-03-16 03:26:32JavaScript

使用 CSS transform 实现旋转

在 JavaScript 中可以通过修改元素的 transform 样式属性来实现旋转效果。CSS 的 rotate() 函数接受角度参数,单位为 deg

const element = document.getElementById('target');
element.style.transform = 'rotate(45deg)';

使用 CSS 动画实现连续旋转

通过 CSS @keyframes 定义旋转动画,然后用 JavaScript 控制动画的播放。

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
const element = document.getElementById('target');
element.style.animation = 'spin 2s linear infinite';

使用 requestAnimationFrame 实现平滑旋转

通过 JavaScript 的 requestAnimationFrame 实现更精细的旋转控制。

let angle = 0;
const element = document.getElementById('target');

function rotate() {
  angle = (angle + 1) % 360;
  element.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(rotate);
}

rotate();

使用 Canvas 绘制旋转对象

在 Canvas 中实现旋转需要先保存当前状态,旋转画布,绘制对象,然后恢复状态。

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

function draw() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.save();
  ctx.translate(100, 100);
  ctx.rotate(angle * Math.PI / 180);
  ctx.fillRect(-50, -50, 100, 100);
  ctx.restore();
  angle = (angle + 1) % 360;
  requestAnimationFrame(draw);
}

draw();

使用 Three.js 实现 3D 旋转

在 3D 场景中实现物体旋转需要使用 Three.js 等 3D 库。

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

camera.position.z = 5;

function animate() {
  requestAnimationFrame(animate);
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
}

animate();

使用 GSAP 动画库实现旋转

GSAP 提供了更强大的动画控制功能,包括旋转动画。

const element = document.getElementById('target');
gsap.to(element, { 
  rotation: 360,
  duration: 2,
  repeat: -1,
  ease: "none"
});

旋转事件处理

为元素添加交互式旋转控制,例如通过鼠标移动控制旋转角度。

js 实现角度旋转

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

element.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;
  startAngle = angle;
  element.style.transform = `rotate(${currentAngle}deg)`;
});

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

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

标签: 角度js
分享给朋友:

相关文章

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现变形

js实现变形

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

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js画图实现

js画图实现

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

js实现正交

js实现正交

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

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…