diff --git a/web/main.js b/web/main.js
index f6af59f..23c2659 100644
--- a/web/main.js
+++ b/web/main.js
@@ -507,8 +507,8 @@ function showImageModal(src) {
modal.className = 'img-modal-bg';
modal.innerHTML = `
-

+
+
×
`;
@@ -516,15 +516,73 @@ function showImageModal(src) {
// 关闭逻辑
modal.querySelector('.img-modal-close').onclick = () => modal.remove();
modal.onclick = (e) => { if (e.target === modal) modal.remove(); };
- // 支持缩放
+ // 支持缩放和拖动
const img = modal.querySelector('img');
let scale = 1;
+ let isDragging = false;
+ let lastX = 0, lastY = 0;
+ let offsetX = 0, offsetY = 0;
+ img.ondragstart = function(e) { e.preventDefault(); };
img.onwheel = function(ev) {
ev.preventDefault();
+ const prevScale = scale;
scale += ev.deltaY < 0 ? 0.1 : -0.1;
scale = Math.max(0.2, Math.min(5, scale));
- img.style.transform = `scale(${scale})`;
+ // 缩放以图片中心为基准
+ if (scale === 1) {
+ offsetX = 0;
+ offsetY = 0;
+ } else if (prevScale !== scale) {
+ // 缩放时保持当前偏移不变
+ }
+ updateTransform();
};
+
+ function updateTransform() {
+ img.style.transform = `translate(${offsetX}px,${offsetY}px) scale(${scale})`;
+ img.style.cursor = scale > 1 ? (isDragging ? 'grabbing' : 'grab') : 'zoom-in';
+ }
+
+ img.onmousedown = function(ev) {
+ if (scale <= 1) return;
+ isDragging = true;
+ lastX = ev.clientX;
+ lastY = ev.clientY;
+ img.style.cursor = 'grabbing';
+ document.body.style.userSelect = 'none';
+ };
+ window.onmousemove = function(ev) {
+ if (!isDragging) return;
+ offsetX += ev.clientX - lastX;
+ offsetY += ev.clientY - lastY;
+ lastX = ev.clientX;
+ lastY = ev.clientY;
+ updateTransform();
+ };
+ window.onmouseup = function() {
+ if (isDragging) {
+ isDragging = false;
+ img.style.cursor = 'grab';
+ document.body.style.userSelect = '';
+ }
+ };
+ // 双击还原
+ img.ondblclick = function() {
+ scale = 1;
+ offsetX = 0;
+ offsetY = 0;
+ updateTransform();
+ };
+ // 关闭时清理事件
+ const cleanup = () => {
+ window.onmousemove = null;
+ window.onmouseup = null;
+ document.body.style.userSelect = '';
+ };
+ modal.addEventListener('remove', cleanup);
+ modal.querySelector('.img-modal-close').addEventListener('click', cleanup);
+ // 初始化
+ updateTransform();
}
// 页面初始化