当前位置:首页 > JavaScript

js 实现角度旋转

2026-02-03 02:47:26JavaScript

使用 CSS transform 实现旋转

通过修改元素的 transform 属性实现旋转效果。CSS 的 rotate() 函数接受角度参数(单位为 deg)。

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

动态控制旋转角度时,可通过变量或状态更新:

let angle = 0;
function rotateElement() {
  angle += 10;
  element.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(rotateElement); // 实现动画循环
}
rotateElement();

使用 Canvas 绘制旋转图形

Canvas 的 rotate() 方法以弧度为单位旋转绘图上下文,需配合 save()restore() 管理状态。

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

ctx.save(); // 保存当前状态
ctx.translate(100, 100); // 设置旋转中心点
ctx.rotate(Math.PI / 4); // 旋转45度(π/4弧度)
ctx.fillRect(-50, -50, 100, 100); // 绘制矩形(以中心为基准)
ctx.restore(); // 恢复原始状态

动态旋转示例:

function drawRotatedRect(angle) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.save();
  ctx.translate(100, 100);
  ctx.rotate(angle);
  ctx.fillStyle = 'blue';
  ctx.fillRect(-50, -50, 100, 100);
  ctx.restore();
}

let angle = 0;
setInterval(() => {
  angle += 0.1;
  drawRotatedRect(angle);
}, 50);

使用 SVG 实现旋转

SVG 元素可通过 transform 属性或 CSS 实现旋转,支持角度单位和旋转中心点。

const svgElement = document.getElementById('svg-rect');
svgElement.setAttribute('transform', 'rotate(30, 50, 50)'); // 旋转30度,中心点(50,50)

动态更新示例:

let svgAngle = 0;
function updateSvgRotation() {
  svgAngle += 2;
  svgElement.setAttribute('transform', `rotate(${svgAngle}, 50, 50)`);
  requestAnimationFrame(updateSvgRotation);
}
updateSvgRotation();

使用 WebGL 实现三维旋转

WebGL 通过矩阵变换实现复杂旋转,通常使用库如 gl-matrix 处理数学运算。

const gl = canvas.getContext('webgl');
const program = initShaderProgram(gl, vsSource, fsSource); // 假设已初始化着色器

const modelViewMatrix = mat4.create();
mat4.rotate(modelViewMatrix, modelViewMatrix, angleInRadians, [0, 1, 0]); // 绕Y轴旋转

// 在渲染循环中更新旋转角度并绘制
function render() {
  mat4.rotate(modelViewMatrix, modelViewMatrix, 0.01, [0, 1, 0]);
  gl.uniformMatrix4fv(uModelViewMatrix, false, modelViewMatrix);
  gl.drawArrays(gl.TRIANGLES, 0, 36);
  requestAnimationFrame(render);
}
render();

角度与弧度转换

JavaScript 三角函数使用弧度,需注意单位转换:

js 实现角度旋转

function degToRad(degrees) {
  return degrees * (Math.PI / 180);
}

function radToDeg(radians) {
  return radians * (180 / Math.PI);
}

console.log(degToRad(180)); // 输出: 3.141592653589793

性能优化建议

  • 对于频繁更新的旋转动画,优先使用 requestAnimationFrame 而非 setInterval
  • Canvas 和 WebGL 操作中,避免在循环内创建新对象,复用矩阵和变量。
  • 使用 CSS 硬件加速时,确保旋转元素具有 will-change: transform 属性。

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

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现求导

js实现求导

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

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

js 实现进度条

js 实现进度条

使用 HTML 和 CSS 创建基础结构 进度条需要一个容器和一个填充元素。HTML 结构可以简单如下: <div class="progress-container"> <d…