<td> <input type="file" onchange="previewImage(this)" onclick="showPopup(this.src)"style="width: 100px; height: auto;" > </td>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.setAttribute("data-clicked", "false"); // 添加data-clicked属性,并初始化为false // 添加图片点击事件处理函数 img.onclick = function () { if (img.getAttribute("data-clicked") === "false") { // 第一次点击时,将data-clicked属性设置为true,并返回 img.setAttribute("data-clicked", "true"); return; } else { showPopup(img.src); // 点击图片放大时显示悬浮窗 } }; // 隐藏原始的input元素 input.style.display = "none"; // 添加图片到input元素的父节点 input.parentNode.appendChild(img); }; reader.readAsDataURL(input.files[0]); } } function showPopup(src) { 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 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.appendChild(img); // 关闭悬浮窗 popup.onclick = function () { document.body.removeChild(popup); }; document.body.appendChild(popup); }我点击添加图片时,悬浮窗就出现,我需要再添加图片完成后,需要放大图片时,点击图片后才出现悬浮窗
时间: 2024-04-15 16:29:00 浏览: 214
非常抱歉之前的回答还是有误。要在点击图片放大时才显示悬浮窗,并且不在添加图片时显示悬浮窗,您可以在`img.onclick`事件处理函数中添加逻辑来阻止在添加图片时显示悬浮窗。下面是修改后的代码示例:
```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.setAttribute("data-clicked", "false"); // 添加data-clicked属性,并初始化为false
// 添加图片点击事件处理函数
img.onclick = function () {
if (img.getAttribute("data-clicked") === "false") {
// 第一次点击时,将data-clicked属性设置为true,并返回
img.setAttribute("data-clicked", "true");
return;
} else {
showPopup(img.src); // 点击图片放大时显示悬浮窗
}
};
// 隐藏原始的input元素
input.style.display = "none";
// 添加图片到input元素的父节点
input.parentNode.appendChild(img);
};
reader.readAsDataURL(input.files[0]);
}
}
function showPopup(src) {
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 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.appendChild(img);
// 关闭悬浮窗
popup.onclick = function () {
document.body.removeChild(popup);
};
// 判断图片是否已经被点击过,如果是,则显示悬浮窗
if (img.getAttribute("data-clicked") === "true") {
document.body.appendChild(popup);
}
}
```
在上述代码中,我们通过为图片元素`img`添加了一个自定义属性`data-clicked`来标记是否已经点击过图片。在点击事件处理函数中,我们首先检查图片的`data-clicked`属性,如果为false,则表示第一次点击图片,此时将`data-clicked`属性设置为true,并返回;如果为true,则表示已经点击过图片,此时显示悬浮窗。
这样,只有在点击图片放大时,才会显示放大图片的悬浮窗。
希望这次能满足您的需求!如有任何进一步的问题,请随时提问。
阅读全文