function showPopup(src) { if (isPopupVisible) { return; // 如果悬浮窗已经显示,则直接返回 } isPopupVisible = true; // 标记悬浮窗为显示状态 var popup = document.createElement("div"); popup.style.position = "fixed"; popup.style.top = "50%"; popup.style.left = "50%"; popup.style.transform = "translate(-50%, -50%)"; popup.style.backgroundColor = "rgba(0, 0, 0, 0.8)"; popup.style.zIndex = "9999"; popup.style.width = "75%"; // 设置悬浮窗宽度为页面宽度的75% popup.style.height = "75%"; // 设置悬浮窗高度为页面高度的75% // 使图片在悬浮窗居中 var imgContainer = document.createElement("div"); imgContainer.style.display = "flex"; imgContainer.style.justifyContent = "center"; imgContainer.style.alignItems = "center"; imgContainer.style.width = "100%"; imgContainer.style.height = "100%"; var img = document.createElement("img"); img.src = src; img.alt = "放大照片"; img.style.maxWidth = "100%"; img.style.maxHeight = "100%"; var scale = 1; // 初始缩放比例 var scaleFactor = 0.1; // 每次滚动的缩放因子 // 鼠标滚轮事件 img.onwheel = function (e) { e.preventDefault(); // 阻止默认滚轮行为处理页面滚动 scale += e.deltaY > 0 ? -scaleFactor : scaleFactor; // 根据滚轮滚动方向确定缩放比例 scale = Math.max(scale, 0.1); // 最小缩放比例为0.1 img.style.transform = `scale(${scale})`; }; // 关闭悬浮窗 popup.onclick = function () { document.body.removeChild(popup); isPopupVisible = false; // 标记悬浮窗为隐藏状态 }; imgContainer.appendChild(img); popup.appendChild(imgContainer); document.body.appendChild(popup); }在我点开图片放大后,需要根据鼠标位置对图片相对应位置进行放大,而不是直接中心放大
时间: 2024-04-16 18:28:24 浏览: 156
vue实现移动端悬浮窗效果
如果你想在放大图片后根据鼠标位置对图片的相应位置进行放大,你可以在代码中修改`img.onwheel`事件处理程序。以下是修改后的代码示例:
```javascript
// 鼠标滚轮事件
img.onwheel = function (e) {
e.preventDefault(); // 阻止默认滚轮行为处理页面滚动
var rect = img.getBoundingClientRect();
var mouseX = e.clientX - rect.left; // 鼠标在图片上的相对X坐标
var mouseY = e.clientY - rect.top; // 鼠标在图片上的相对Y坐标
var oldWidth = rect.width; // 原始图片宽度
var oldHeight = rect.height; // 原始图片高度
scale += e.deltaY > 0 ? -scaleFactor : scaleFactor; // 根据滚轮滚动方向确定缩放比例
scale = Math.max(scale, 0.1); // 最小缩放比例为0.1
var newWidth = oldWidth * scale; // 缩放后的宽度
var newHeight = oldHeight * scale; // 缩放后的高度
var scaleX = newWidth / oldWidth; // 宽度缩放比例
var scaleY = newHeight / oldHeight; // 高度缩放比例
var offsetX = (mouseX - rect.width / 2) * scaleX; // X轴偏移量
var offsetY = (mouseY - rect.height / 2) * scaleY; // Y轴偏移量
img.style.transform = `scale(${scale}) translate(${offsetX}px, ${offsetY}px)`;
};
```
在这个修改后的代码示例中,我们根据鼠标在图片上的位置计算出缩放后的偏移量,并将其应用于图片的`transform`属性。这样,在滚轮滚动时,图片将根据鼠标位置进行放大和缩小,同时保持鼠标位置相对图片的对应位置不变。
希望这个修改后的代码对你有帮助!
阅读全文