当前位置:首页 > JavaScript

js实现图片旋转

2026-04-03 23:15:25JavaScript

使用 CSS transform 属性旋转图片

通过 CSS 的 transform 属性可以轻松实现图片旋转效果。在 JavaScript 中动态修改该属性即可控制旋转角度。

const image = document.getElementById('myImage');
image.style.transform = 'rotate(45deg)';

使用 Canvas 绘制旋转图片

Canvas 提供了更底层的绘图能力,可以实现更复杂的旋转效果,包括围绕特定点旋转。

js实现图片旋转

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = function() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.save();
    ctx.translate(canvas.width/2, canvas.height/2);
    ctx.rotate(Math.PI / 4); // 45度
    ctx.drawImage(img, -img.width/2, -img.height/2);
    ctx.restore();
};
img.src = 'image.jpg';

实现连续旋转动画

通过 requestAnimationFrame 可以实现平滑的连续旋转动画效果。

js实现图片旋转

let angle = 0;
function rotate() {
    const image = document.getElementById('myImage');
    angle = (angle + 2) % 360;
    image.style.transform = `rotate(${angle}deg)`;
    requestAnimationFrame(rotate);
}
rotate();

使用 CSS 动画实现旋转

纯 CSS 动画也可以实现旋转效果,通过 JavaScript 控制动画的播放状态。

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

.spin {
    animation: spin 2s linear infinite;
}
document.getElementById('myImage').classList.add('spin');

实现拖拽旋转功能

结合鼠标事件可以实现用户交互式的图片旋转功能。

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

image.addEventListener('mousedown', (e) => {
    isDragging = true;
    startAngle = Math.atan2(e.clientY - image.offsetTop, e.clientX - image.offsetLeft) * (180 / Math.PI);
});

document.addEventListener('mousemove', (e) => {
    if (!isDragging) return;
    const angle = Math.atan2(e.clientY - image.offsetTop, e.clientX - image.offsetLeft) * (180 / Math.PI);
    currentAngle += angle - startAngle;
    image.style.transform = `rotate(${currentAngle}deg)`;
    startAngle = angle;
});

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

注意事项

  • 旋转中心点默认是元素中心,可通过 transform-origin 属性调整
  • 考虑性能影响,特别是在移动设备上
  • 高分辨率图片旋转可能出现锯齿,可添加 image-rendering: optimizeQuality 改善
  • Canvas 方法需要处理跨域问题

标签: 图片js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

vue实现图片预览

vue实现图片预览

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方库如viewer.js或vue-photo-preview,以及自…

js实现防洪

js实现防洪

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

使用js实现

使用js实现

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