当前位置:首页 > JavaScript

js实现图片旋转

2026-02-28 22:48:21JavaScript

使用CSS transform实现图片旋转

通过CSS的transform属性结合JavaScript动态修改旋转角度,实现图片旋转效果。以下是一个基础实现示例:

<img id="rotateImage" src="your-image.jpg" alt="Rotating Image">
<button onclick="rotateImage()">旋转图片</button>

<script>
  let currentRotation = 0;
  function rotateImage() {
    currentRotation += 90;
    document.getElementById('rotateImage').style.transform = `rotate(${currentRotation}deg)`;
  }
</script>

使用canvas实现精确旋转

对于需要更精确控制的旋转(如非90度倍数旋转),可以使用canvas API:

function rotateCanvasImage(imageElement, degrees) {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');

  // 调整canvas尺寸以适应旋转后的图像
  const rad = degrees * Math.PI / 180;
  canvas.width = Math.abs(imageElement.width * Math.cos(rad)) + 
                 Math.abs(imageElement.height * Math.sin(rad));
  canvas.height = Math.abs(imageElement.height * Math.cos(rad)) + 
                  Math.abs(imageElement.width * Math.sin(rad));

  // 执行旋转
  ctx.translate(canvas.width/2, canvas.height/2);
  ctx.rotate(rad);
  ctx.drawImage(imageElement, -imageElement.width/2, -imageElement.height/2);

  return canvas.toDataURL();
}

实现平滑动画旋转

使用CSS动画实现连续平滑旋转效果:

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

.rotating {
  animation: spin 2s linear infinite;
}
// 添加/移除旋转类
document.getElementById('imageId').classList.toggle('rotating');

响应手势旋转(移动端)

通过触摸事件实现手势旋转:

let lastAngle = 0;
const image = document.getElementById('image');

image.addEventListener('touchmove', (e) => {
  if (e.touches.length === 2) {
    const touch1 = e.touches[0];
    const touch2 = e.touches[1];

    const currentAngle = Math.atan2(
      touch2.clientY - touch1.clientY,
      touch2.clientX - touch1.clientX
    ) * 180 / Math.PI;

    if (lastAngle !== 0) {
      const angleDiff = currentAngle - lastAngle;
      const currentRotation = parseInt(image.style.transform.replace(/[^0-9]/g, '') || '0');
      image.style.transform = `rotate(${currentRotation + angleDiff}deg)`;
    }

    lastAngle = currentAngle;
  }
});

image.addEventListener('touchend', () => {
  lastAngle = 0;
});

使用第三方库(如jQuery)

如果需要简化操作,可以使用jQuery实现:

js实现图片旋转

$('#rotateBtn').click(function() {
  let rotation = ($('#myImage').data('rotation') || 0) + 90;
  $('#myImage').css({
    'transform': 'rotate(' + rotation + 'deg)',
    '-webkit-transform': 'rotate(' + rotation + 'deg)',
    '-ms-transform': 'rotate(' + rotation + 'deg)'
  }).data('rotation', rotation);
});

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

相关文章

vue实现js休眠

vue实现js休眠

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

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

css制作图片

css制作图片

使用CSS创建图片效果 CSS可以通过多种方式实现图片的显示、处理和特效。以下是几种常见的方法: 使用background-image属性 在CSS中可以通过background-image属性将图…

js树实现

js树实现

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

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…