canvas实现图片缩放、移动、旋转
时间: 2023-09-15 17:19:55 浏览: 123
图片缩放和旋转
要实现图片的缩放、移动、旋转,可以通过操作canvas的变换矩阵来实现。以下是一个实现的示例代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvas 图片缩放、移动、旋转</title>
<style>
canvas {
border: 1px solid #ccc;
}
</style>
</head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
<script>
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 加载图片
const img = new Image();
img.src = 'https://example.com/image.png';
img.onload = function() {
// 图片加载完成后执行以下代码
// 初始化变量
let scale = 1; // 缩放比例
let rotate = 0; // 旋转角度
let translateX = 0; // 水平移动距离
let translateY = 0; // 垂直移动距离
// 绘制图片
drawImage();
// 添加事件监听器
canvas.addEventListener('wheel', handleWheel);
canvas.addEventListener('mousedown', handleMouseDown);
canvas.addEventListener('mousemove', handleMouseMove);
canvas.addEventListener('mouseup', handleMouseUp);
// 绘制图片
function drawImage() {
// 清空画布
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 设置变换矩阵
ctx.setTransform(scale, 0, 0, scale, translateX, translateY);
ctx.rotate(rotate * Math.PI / 180);
// 绘制图片
ctx.drawImage(img, -img.width / 2, -img.height / 2);
// 恢复变换矩阵
ctx.setTransform(1, 0, 0, 1, 0, 0);
}
// 处理滚轮事件
function handleWheel(e) {
e.preventDefault();
// 计算缩放比例
const delta = Math.max(-1, Math.min(1, e.deltaY));
scale += delta * 0.1;
// 限制缩放比例
if (scale < 0.1) {
scale = 0.1;
} else if (scale > 10) {
scale = 10;
}
// 绘制图片
drawImage();
}
// 处理鼠标按下事件
function handleMouseDown(e) {
e.preventDefault();
// 记录鼠标按下时的位置
const startX = e.clientX;
const startY = e.clientY;
// 添加鼠标移动和松开事件监听器
canvas.addEventListener('mousemove', handleDrag);
canvas.addEventListener('mouseup', handleDragEnd);
// 处理拖拽事件
function handleDrag(e) {
e.preventDefault();
// 计算移动距离
const dx = e.clientX - startX;
const dy = e.clientY - startY;
// 更新移动距离
translateX += dx;
translateY += dy;
// 绘制图片
drawImage();
// 更新鼠标位置
startX = e.clientX;
startY = e.clientY;
}
// 处理拖拽结束事件
function handleDragEnd(e) {
e.preventDefault();
// 移除事件监听器
canvas.removeEventListener('mousemove', handleDrag);
canvas.removeEventListener('mouseup', handleDragEnd);
}
}
// 处理鼠标移动事件
function handleMouseMove(e) {
e.preventDefault();
// 判断是否按下了鼠标左键
if (e.buttons === 1) {
// 计算移动距离
const dx = e.movementX;
const dy = e.movementY;
// 更新移动距离
translateX += dx;
translateY += dy;
// 绘制图片
drawImage();
}
}
// 处理鼠标松开事件
function handleMouseUp(e) {
e.preventDefault();
}
};
</script>
</body>
</html>
```
这个示例代码演示了如何通过鼠标滚轮、鼠标拖拽和鼠标移动来实现图片的缩放、移动、旋转。具体实现方式是通过改变变换矩阵中的缩放比例、旋转角度和平移距离来实现的。
阅读全文