返回
用js实现图片拖拽、定点缩放、旋转,玩转图片交互
前端
2023-09-25 14:23:45
在上一篇文章中,我们讲解了如何用js实现图片的拖拽功能,本篇将继续深入探讨如何实现图片的定点缩放和旋转,进一步提升图片交互体验。
定点缩放
定点缩放是指图片围绕某一点进行缩放,同时保持图片的原始宽高比。实现该功能,我们需要在原有的拖拽基础上进行改造。
HTML部分
<div id="image-container">
<img id="image" src="image.png" alt="Image" />
<div id="scale-point"></div>
</div>
添加一个<div>
元素作为缩放点,它的位置将作为缩放的中心点。
CSS部分
#scale-point {
position: absolute;
width: 10px;
height: 10px;
background: #ccc;
border: 1px solid #000;
border-radius: 50%;
cursor: pointer;
}
设置缩放点的样式,使其可见并易于操作。
JS部分
const image = document.getElementById('image');
const scalePoint = document.getElementById('scale-point');
const imageContainer = document.getElementById('image-container');
let scaleOriginX, scaleOriginY;
scalePoint.addEventListener('mousedown', (e) => {
scaleOriginX = e.clientX - image.offsetLeft;
scaleOriginY = e.clientY - image.offsetTop;
document.addEventListener('mousemove', scaleImage);
document.addEventListener('mouseup', stopScaleImage);
});
function scaleImage(e) {
const scaleX = e.clientX - scaleOriginX;
const scaleY = e.clientY - scaleOriginY;
image.style.transform = `scale(${scaleX / image.offsetWidth}, ${scaleY / image.offsetHeight})`;
}
function stopScaleImage() {
document.removeEventListener('mousemove', scaleImage);
document.removeEventListener('mouseup', stopScaleImage);
}
这个脚本记录缩放点的偏移量,并监听鼠标移动事件。在鼠标移动期间,计算图片缩放比例并应用到图片上,实现定点缩放。
旋转
旋转是指图片绕其中心点进行旋转。实现该功能,我们同样需要改造拖拽功能。
HTML部分
<div id="image-container">
<img id="image" src="image.png" alt="Image" />
<div id="rotate-handle"></div>
</div>
添加一个<div>
元素作为旋转手柄,它的位置将作为旋转的中心点。
CSS部分
#rotate-handle {
position: absolute;
width: 20px;
height: 20px;
background: #ccc;
border: 1px solid #000;
border-radius: 50%;
cursor: pointer;
}
设置旋转手柄的样式,使其可见并易于操作。
JS部分
const image = document.getElementById('image');
const rotateHandle = document.getElementById('rotate-handle');
const imageContainer = document.getElementById('image-container');
let rotateOriginX, rotateOriginY;
rotateHandle.addEventListener('mousedown', (e) => {
rotateOriginX = e.clientX - image.offsetLeft;
rotateOriginY = e.clientY - image.offsetTop;
document.addEventListener('mousemove', rotateImage);
document.addEventListener('mouseup', stopRotateImage);
});
function rotateImage(e) {
const rotateX = e.clientX - rotateOriginX;
const rotateY = e.clientY - rotateOriginY;
const angle = Math.atan2(rotateY, rotateX) * (180 / Math.PI);
image.style.transform = `rotate(${angle}deg)`;
}
function stopRotateImage() {
document.removeEventListener('mousemove', rotateImage);
document.removeEventListener('mouseup', stopRotateImage);
}
这个脚本记录旋转手柄的偏移量,并监听鼠标移动事件。在鼠标移动期间,计算图片旋转角度并应用到图片上,实现图片旋转。
结束语
通过本文的讲解,我们完成了图片的定点缩放和旋转功能。这些交互功能将大大提升用户操作图片的体验,让图片交互更加丰富和实用。欢迎读者根据自己的需要进行拓展,打造更完善的图片交互方案。

扫码关注微信公众号
音频优化实战:浅谈SharedArrayBuffer共享与二进制传输

化繁为简!SASS 助阵,动态设置网站主题超简单!

前端菜鸟的快速入门指南:框架+源码助你打造专属应用

OpenInula 官网惊天大秘密,彻底颠覆 OpenEuler 和 HarmonyOS 认知

#小Demo教程:轻松搞定页面切换#title# <#keyword>Web开发, 前端, 页面切换, 小demo, HTML, CSS, JavaScript, DIV#</#keyword> <#description>本教程将逐步教你如何使用 HTML、CSS 和 JavaScript 在网页中实现页面的切换。无论你是初学者还是经验丰富的开发者,都可以轻松掌握这些基础知识,并应用到你的项目中。#</#description> **前言** 在网页开发中,页面切换是一个常见的需求。比如,当用户点击导航栏上的某个链接时,需要切换到对应的页面内容。实现页面切换有多种方法,但最常用的是使用 DIV 标签和 JavaScript。 **步骤 1:创建 HTML 结构** 首先,我们需要创建一个 HTML 结构来容纳我们的页面内容。这里使用三个 DIV 标签,分别用于导航栏、页面内容和页脚。 ```html <!DOCTYPE html> <html> <head> 页面切换
