var isImageAdded = false; // 图片是否已经添加的标记 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 = "照片"; // 隐藏原始的input元素 input.style.display = "none"; // 添加图片到input元素的父节点 input.parentNode.appendChild(img); isImageAdded = true; // 图片已经添加标记为true // 添加图片点击事件处理函数 img.onclick = function () { if (isImageAdded) { showPopup(img.src); // 点击图片放大时显示悬浮窗 } }; }; reader.readAsDataURL(input.files[0]); } } function showPopup(src) { var overlay = document.createElement("div"); overlay.style.position = "fixed"; overlay.style.top = "0"; overlay.style.left = "0"; overlay.style.width = "100%"; overlay.style.height = "100%"; overlay.style.backgroundColor = "rgba(0, 0, 0, 0.8)"; overlay.style.zIndex = "9998"; // 设置遮罩层的z-index低于悬浮窗,但高于其他元素 document.body.appendChild(overlay); 修改为这个代码后,还是存在添加图片时就出现悬浮窗的问题
时间: 2024-04-17 17:27:34 浏览: 100
非常抱歉,我之前的回答仍然有误。我注意到问题出在 `isImageAdded` 标记的使用上。应该在图片加载完成后再将 `isImageAdded` 标记为 `true`,以确保只有在图片添加完成后点击图片才会显示悬浮窗。以下是修正后的代码示例:
```javascript
var isImageAdded = false; // 图片是否已经添加的标记
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 = "照片";
// 隐藏原始的input元素
input.style.display = "none";
// 添加图片到input元素的父节点
input.parentNode.appendChild(img);
// 添加图片加载完成事件处理函数
img.onload = function () {
isImageAdded = true; // 图片加载完成后标记为true
};
// 添加图片点击事件处理函数
img.onclick = function () {
if (isImageAdded) {
showPopup(img.src); // 点击图片放大时显示悬浮窗
}
};
};
reader.readAsDataURL(input.files[0]);
}
}
function showPopup(src) {
var overlay = document.createElement("div");
overlay.style.position = "fixed";
overlay.style.top = "0";
overlay.style.left = "0";
overlay.style.width = "100%";
overlay.style.height = "100%";
overlay.style.backgroundColor = "rgba(0, 0, 0, 0.8)";
overlay.style.zIndex = "9998"; // 设置遮罩层的z-index低于悬浮窗,但高于其他元素
document.body.appendChild(overlay);
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%
popup.style.overflow = "hidden";
var imgContainer = document.createElement("div");
imgContainer.style.display = "flex";
imgContainer.style.justifyContent = "center";
imgContainer.style.alignItems = "center";
imgContainer.style.backgroundColor = "transparent";
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.onclick = function () {
scale += 0.1;
img.style.transform = "scale(" + scale + ")";
};
// 鼠标滚轮事件
popup.onwheel = function (e) {
e.preventDefault(); // 阻止默认滚轮行为处理页面滚动
scale += e.deltaY > 0 ? -scaleFactor : scaleFactor; // 根据滚轮滚动方向确定缩放比例
scale = Math.max(scale, 0.1); // 最小缩放比例为0.1
img.style.transform = "scale(" + scale + ")";
};
overlay.onclick = function () {
document.body.removeChild(popup);
document.body.removeChild(overlay);
};
imgContainer.appendChild(img);
popup.appendChild(imgContainer);
document.body.appendChild(popup);
}
```
通过在图片加载完成后将 `isImageAdded` 标记为 `true`,确保只有在图片加载完成后点击图片才会显示悬浮窗。请尝试使用上述修正后的代码。如果仍然遇到问题,请提供更详细的代码和相关描述,以便我更好地帮助你解决问题。
阅读全文