如何使包含图像的整个 tingle modal 在加载时可见?
How do I make the entire tingle modal containing an image visible on load?
加载时,如果浏览器宽度大于 540px,包含图像的模式将被截断(见下图)。我应该怎么做才能使垂直滚动条立即出现?
我正在处理的这个现有项目正在使用 tingle modal plug-in。它是这样链接的:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="tingle.min.css">
<style>
html, body {
height: 100%;
}
img {
height: auto;
width: 100%;
}
</style>
<title>Tingle Modal</title>
</head>
<body>
<script src="tingle.min.js"></script>
<script src="modal.js"></script>
</body>
</html>
modal.js
是我创建包含图像的模式的地方:
function createModal(content) {
let $modal = new tingle.modal({
footer: false,
stickyFooter: false,
closeMethods: ["overlay", "button", "escape"],
closeLabel: "Close",
cssClass: ["modal"],
beforeClose: function() {
return true; // close the modal
},
onClose: function() {
$modal.destroy();
}
});
$modal.setContent(content);
$modal.open();
}
createModal("<div id='modal'><img id='sample' src='sample.jpg' /></div>");
console.log(document.getElementById("sample").offsetHeight);
我注意到当您放大或缩小浏览器或调整浏览器大小时,我会得到具有滚动条的预期行为。我还注意到在加载时,图像高度为 0。我无法将图像高度设置为像素值,因为我将有几个模态框包含不同大小的不同图像。
您还可以在此处查看行为:CodeSandbox。请务必先将 CodeSandbox 中的嵌入式浏览器宽度调大,然后刷新看看我的意思。
我尝试了以下方法。但是即使整个模式适合 100vh,它也会添加滚动条,这是不可取的。
.tingle-modal {
overflow-y: scroll;
}
尝试添加这些样式
.tingle-modal {
overflow-y: auto;
}
如果需要保存关闭按钮的位置,则添加:
.tingle-modal__close {
position: sticky;
align-self: end;
}
而不是
createModal("<div id='modal'><img src='sample.jpg' /></div>");
使用它
const img = new Image();
img.onload = () => {
createModal("<div id='modal'><img src='sample.jpg' /></div>");
};
img.src = "sample.jpg";
我查看了tingle.min.js
中的代码。它检查模态框的高度是否溢出,如果是,它添加一个 tingle-modal--overflow
class。但是,检查高度时图像尚未加载。所以我不得不在调用 createModal
函数后重做检查,如下所示:
document.getElementsByTagName("img")[0].onload = function() {
const $modal = document.getElementsByClassName("tingle-modal")[0];
if (window.innerHeight <= $modal.clientHeight)
$modal.classList.add("tingle-modal--overflow");
};
这是解决方案的 jQuery 版本:
$(".tingle-modal-box img").on("load", function() {
const $modal = $(".tingle-modal");
if (window.innerHeight <= $modal.height())
$modal.addClass("tingle-modal--overflow");
});
加载时,如果浏览器宽度大于 540px,包含图像的模式将被截断(见下图)。我应该怎么做才能使垂直滚动条立即出现?
我正在处理的这个现有项目正在使用 tingle modal plug-in。它是这样链接的:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="tingle.min.css">
<style>
html, body {
height: 100%;
}
img {
height: auto;
width: 100%;
}
</style>
<title>Tingle Modal</title>
</head>
<body>
<script src="tingle.min.js"></script>
<script src="modal.js"></script>
</body>
</html>
modal.js
是我创建包含图像的模式的地方:
function createModal(content) {
let $modal = new tingle.modal({
footer: false,
stickyFooter: false,
closeMethods: ["overlay", "button", "escape"],
closeLabel: "Close",
cssClass: ["modal"],
beforeClose: function() {
return true; // close the modal
},
onClose: function() {
$modal.destroy();
}
});
$modal.setContent(content);
$modal.open();
}
createModal("<div id='modal'><img id='sample' src='sample.jpg' /></div>");
console.log(document.getElementById("sample").offsetHeight);
我注意到当您放大或缩小浏览器或调整浏览器大小时,我会得到具有滚动条的预期行为。我还注意到在加载时,图像高度为 0。我无法将图像高度设置为像素值,因为我将有几个模态框包含不同大小的不同图像。
您还可以在此处查看行为:CodeSandbox。请务必先将 CodeSandbox 中的嵌入式浏览器宽度调大,然后刷新看看我的意思。
我尝试了以下方法。但是即使整个模式适合 100vh,它也会添加滚动条,这是不可取的。
.tingle-modal {
overflow-y: scroll;
}
尝试添加这些样式
.tingle-modal {
overflow-y: auto;
}
如果需要保存关闭按钮的位置,则添加:
.tingle-modal__close {
position: sticky;
align-self: end;
}
而不是
createModal("<div id='modal'><img src='sample.jpg' /></div>");
使用它
const img = new Image();
img.onload = () => {
createModal("<div id='modal'><img src='sample.jpg' /></div>");
};
img.src = "sample.jpg";
我查看了tingle.min.js
中的代码。它检查模态框的高度是否溢出,如果是,它添加一个 tingle-modal--overflow
class。但是,检查高度时图像尚未加载。所以我不得不在调用 createModal
函数后重做检查,如下所示:
document.getElementsByTagName("img")[0].onload = function() {
const $modal = document.getElementsByClassName("tingle-modal")[0];
if (window.innerHeight <= $modal.clientHeight)
$modal.classList.add("tingle-modal--overflow");
};
这是解决方案的 jQuery 版本:
$(".tingle-modal-box img").on("load", function() {
const $modal = $(".tingle-modal");
if (window.innerHeight <= $modal.height())
$modal.addClass("tingle-modal--overflow");
});