Js实现任意位置缩放图片,深入理解背后原理
warning:
这篇文章距离上次修改已过200天,其中的内容可能已经有所变动。
在JavaScript中实现任意位置缩放图片,通常涉及到事件监听和计算。以下是一个简单的实现示例:
HTML部分:
<img id="image" src="path/to/your/image.jpg" alt="Resizable Image" />
<div id="handles">
<div class="handle e">e</div>
<div class="handle s">s</div>
<div class="handle w">w</div>
<div class="handle n">n</div>
<div class="handle ne">ne</div>
<div class="handle se">se</div>
<div class="handle sw">sw</div>
<div class="handle nw">nw</div>
</div>
CSS部分:
#image {
position: absolute;
cursor: move;
}
#handles {
position: absolute;
z-index: 10;
}
.handle {
position: absolute;
width: 10px;
height: 10px;
background: #ccc;
font-size: 12px;
color: #fff;
line-height: 10px;
text-align: center;
cursor: nwse-resize;
z-index: 100;
}
/* Define the positions of the resize handles */
.handle.e { top: 0; right: 0; }
.handle.s { bottom: 0; right: 0; }
.handle.w { top: 0; left: 0; }
.handle.n { top: 0; left: 0; }
.handle.ne { top: 0; right: 0; }
.handle.se { bottom: 0; right: 0; }
.handle.sw { bottom: 0; left: 0; }
.handle.nw { top: 0; left: 0; }
JavaScript部分:
const image = document.getElementById('image');
const handles = document.querySelectorAll('#handles .handle');
let isResizing = false;
let startX, startY, startWidth, startHeight;
handles.forEach(handle => {
handle.addEventListener('mousedown', function(e) {
e.preventDefault();
isResizing = true;
startX = e.clientX;
startY = e.clientY;
startWidth = parseInt(image.width, 10);
startHeight = parseInt(image.height, 10);
document.addEventListener('mousemove', resize);
document.addEventListener('mouseup', stopResize);
});
});
function resize(e) {
if (isResizing) {
const deltaX = e.clientX - startX;
const deltaY = e.clientY - startY;
// Resize according to the handle position
switch (this.className) {
case 'handle e':
image.width = startWidth + deltaX;
break;
case 'handle s':
image.height = startHeight + deltaY;
break;
case 'handle w':
image.width = startWidth - deltaX;
image.style.left = s
评论已关闭