function showPopup(imageSrc) { var popup = document.createElement("div"); var popupImg = document.createElement("img"); var scale = 1; var isDragging = false; var startX, startY, translateX, translateY; // 设置弹出窗口中的图片 popupImg.src = imageSrc; popupImg.style.transform = `scale(${scale})`; // 加载完成后计算图片的宽高比例 popupImg.onload = function() { var imgWidth = popupImg.width; var imgHeight = popupImg.height; // 计算图片的缩放比例 var windowWidth = window.innerWidth * 0.8; // 按照弹出窗口宽度的80%计算 var windowHeight = window.innerHeight * 0.8; // 按照弹出窗口高度的80%计算 var widthScale = windowWidth / imgWidth; var heightScale = windowHeight / imgHeight; scale = Math.min(widthScale, heightScale); // 设置弹出窗口中的图片样式 popupImg.style.transform = `scale(${scale})`; popupImg.style.display = "block"; popupImg.style.margin = "auto"; // 居中弹出窗口 function centerPopup() { var windowHeight = window.innerHeight; var popupHeight = popup.offsetHeight; var scrollTop = window.pageYOffset || document.documentElement.scrollTop; var offset = (windowHeight - (imgHeight * scale)) / 2 + scrollTop; // 设置弹出窗口的垂直位置 popup.style.top = offset + "px"; } // 设置悬浮窗样式 popup.style.position = "fixed"; popup.style.top = "10%"; popup.style.left = "10%"; popup.style.width = windowWidth + "px"; popup.style.height = windowHeight + "px"; popup.style.backgroundColor = "transparent"; popup.style.zIndex = "9999"; // 添加图片到悬浮窗 popup.appendChild(popupImg); document.body.appendChild(popup); // 初始化居中弹出窗口 centerPopup(); // 添加滚动和调整窗口大小事件监听器 window.addEventListener("scroll", centerPopup); window.addEventListener("resize", centerPopup); // 点击事件监听器,点击其他区域时隐藏弹出窗口 popup.onclick = function () { popup.style.display = "none"; }; // 移除滚动和调整窗口大小事件监听器 function removeListeners() { window.removeEventListener("scroll", centerPopup); window.removeEventListener("resize", centerPopup); } // 在窗口关闭时移除事件监听器 window.onbeforeunload = function () { removeListeners(); }; };需要不管第几行第几列的图片放大时,放大的悬浮窗始终在当前页面最中心
时间: 2024-04-14 13:27:13 浏览: 204
要实现让放大的悬浮窗始终在当前页面最中心,你可以在 `centerPopup` 函数中添加一些代码来实现。在 `popup.style.top` 的赋值语句之前,你可以先计算出窗口的高度和弹出窗口的高度,然后使用这些值来计算垂直偏移量,使弹出窗口保持在页面中心位置。
以下是修改后的代码示例:
```javascript
// 居中弹出窗口
function centerPopup() {
var windowHeight = window.innerHeight;
var popupHeight = popup.offsetHeight;
var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
var offset = (windowHeight - popupHeight) / 2 + scrollTop;
// 设置弹出窗口的垂直位置
popup.style.top = offset + "px";
}
```
这样,无论点击页面上的哪张图片放大,弹出窗口都会始终显示在页面的中心位置。
相关问题
function previewImage(input) { if (input.files && input.files[0]) { var reader = new FileReader(); reader.onload = function (e) { var img = document.createElement("img"); img.src = e.target.result; img.alt = "照片"; img.onclick = function () { showPopup(img.src); }; // 隐藏原始的input元素 input.style.display = "none"; // 添加图片到input元素的父节点 input.parentNode.appendChild(img); }; reader.readAsDataURL(input.files[0]); } } function showPopup(imageSrc) { var popup = document.createElement("div"); var popupImg = document.createElement("img"); var scale = 1; var isDragging = false; var startX, startY, translateX, translateY;
这段代码是用来预览和放大图片的。`previewImage` 函数用于选择图片文件后预览它,并将其添加到对应的输入框之外。`showPopup` 函数用于在单击预览图片时显示一个弹出窗口,并允许对图片进行缩放和拖动操作。
下面是完整的代码示例:
```javascript
function previewImage(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
var img = document.createElement("img");
img.src = e.target.result;
img.alt = "照片";
img.onclick = function () {
showPopup(img.src);
};
// 隐藏原始的 input 元素
input.style.display = "none";
// 添加图片到 input 元素的父节点
input.parentNode.appendChild(img);
};
reader.readAsDataURL(input.files[0]);
}
}
function showPopup(imageSrc) {
var popup = document.createElement("div");
var popupImg = document.createElement("img");
var scale = 1;
var isDragging = false;
var startX, startY, translateX, translateY;
popup.className = "popup";
popup.onclick = function () {
document.body.removeChild(popup);
};
popupImg.src = imageSrc;
popupImg.className = "popup-image";
popupImg.onmousedown = function (e) {
isDragging = true;
startX = e.clientX;
startY = e.clientY;
translateX = 0;
translateY = 0;
};
popupImg.onmousemove = function (e) {
if (isDragging) {
var deltaX = e.clientX - startX;
var deltaY = e.clientY - startY;
translateX += deltaX;
translateY += deltaY;
startX = e.clientX;
startY = e.clientY;
popupImg.style.transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
}
};
popupImg.onmouseup = function () {
isDragging = false;
};
popupImg.onwheel = function (e) {
e.preventDefault();
var delta = Math.max(-1, Math.min(1, e.deltaY));
scale += delta * 0.1;
scale = Math.max(0.1, scale);
popupImg.style.transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
};
popup.appendChild(popupImg);
document.body.appendChild(popup);
}
```
请确保在 HTML 文件中正确引入相关的 CSS 样式,这样弹出窗口和图片的显示效果才能正常展示。
希望这个解答对你有帮助!如果你还有其他问题,请随时提问。
function previewImage(input) { if (input.files && input.files[0]) { var reader = new FileReader(); reader.onload = function (e) { var img = document.createElement("img"); img.src = e.target.result; img.alt = "照片"; img.onclick = function () { showPopup(img.src); }; input.parentNode.appendChild(img); input.style.display = "none"; // 隐藏原始的input元素 }; reader.readAsDataURL(input.files[0]); } } function showPopup(imageSrc) { var popup = document.createElement("div"); var popupImg = document.createElement("img"); var scale = 1; // 设置弹出窗口中的图片 popupImg.src = imageSrc; popupImg.style.transform = `scale(${scale})`; // 设置悬浮窗样式 popup.style.position = "fixed"; popup.style.top = "50%"; popup.style.left = "50%"; popup.style.transform = "translate(-50%, -50%)"; popup.style.backgroundColor = "white"; popup.style.padding = "20px"; popup.style.zIndex = "9999"; // 添加图片到悬浮窗 popup.appendChild(popupImg); document.body.appendChild(popup); // 添加点击事件监听器,点击其他区域时隐藏弹出窗口 popup.onclick = function () { popup.style.display = "none"; }我的弹窗只需要铺满当前页面的80%,剩余空白处设置成透明
要实现弹窗只铺满当前页面的80%并将剩余空白处设置为透明,您可以按照以下步骤进行操作:
1. 在`showPopup`函数中修改弹出窗口的样式。
2. 将弹出窗口的宽度设置为当前页面宽度的80%。
3. 将弹出窗口的高度设置为当前页面高度的80%。
4. 将弹出窗口的左边距设置为当前页面宽度的10%。
5. 将弹出窗口的上边距设置为当前页面高度的10%。
6. 将弹出窗口的背景颜色设置为透明。
以下是修改后的示例代码:
```javascript
function showPopup(imageSrc) {
var popup = document.createElement("div");
var popupImg = document.createElement("img");
var scale = 1;
// 设置弹出窗口中的图片
popupImg.src = imageSrc;
popupImg.style.transform = `scale(${scale})`;
// 设置悬浮窗样式
popup.style.position = "fixed";
popup.style.top = "10%";
popup.style.left = "10%";
popup.style.width = "80%";
popup.style.height = "80%";
popup.style.backgroundColor = "transparent";
popup.style.zIndex = "9999";
// 添加图片到悬浮窗
popup.appendChild(popupImg);
document.body.appendChild(popup);
// 添加点击事件监听器,点击其他区域时隐藏弹出窗口
popup.onclick = function () {
popup.style.display = "none";
};
// 添加滚轮事件监听器,实现缩放功能
popup.onwheel = function (event) {
event.preventDefault();
scale += event.deltaY * -0.01;
scale = Math.max(0.5, scale); // 设置最小缩放比例
scale = Math.min(3, scale); // 设置最大缩放比例
popupImg.style.transform = `scale(${scale})`;
};
}
```
这样,弹出窗口会铺满当前页面的80%,并将剩余空白处设置为透明。
希望对您有所帮助!如果您有任何其他问题,请随时提问。
阅读全文