当前位置:首页 > 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 提供了更底层的绘图能力,可以实现更复杂的旋转效果,包括围绕特定点旋转。

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 可以实现平滑的连续旋转动画效果。

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');

实现拖拽旋转功能

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

js实现图片旋转

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
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

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

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js树实现

js树实现

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

js画图实现

js画图实现

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

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…