【发布时间】:2026-01-16 03:00:02
【问题描述】:
在我正在开发的响应式网站上,我有自己的小灯箱脚本,它可以全屏打开图像,同时保持它们的纵横比。这很简单,使用 2 个 div(外部全屏 div 带有黑色背景“lbBlack”和内部 div 带有图像“lbImg”):
//super small lightbox ;)
$("#posts").on("click", ".img", function(event) {
$('#lbBlack').css('top',$(document).scrollTop());
$('#lbImg').attr('src', $(this).attr('src'));
$('#lbBlack').css('width',$(window).width());
$('#lbBlack').css('height',window.innerHeight);
$('#lbBlack').fadeIn(500);
$('#lbImg').css('margin-top',((window.innerHeight-$('#lbImg').height()))/2);
document.body.style.overflow="hidden";
document.ontouchmove = function(event){
event.preventDefault();
}
$('#lbBlack').on("click", "#lbImg, body", function(event) {
$('#lbBlack').fadeOut(500);
document.body.style.overflow="visible";
document.ontouchmove = function(event){
return true;
}
});
});
对于 iOS,我必须添加 ontouchmove-prevention,因为 body-overflow-hidden 不足以避免在灯箱打开时滚动。
现在上面这个工作解决方案的“大问题”:我想启用缩放图像。 “ontouchmove”代码可以防止这种情况发生。
有什么想法吗?
HTML 代码:
<body>
<div id="lbBlack">
<img id="lbImg">
</div>.....
CSS 代码:
#lbBlack {
display: none;
position: absolute;
left: 0;
background-color: black;
z-index: 2001;
text-align: center;
}
#lbBlack #lbImg {
max-height: 100%;
max-width: 100%;
position: relative;
}
所以我认为我正在寻找的是一种防止滚动同时仍保持缩放可能性的方法。我还是不明白为什么 body-overflow:hidden 仍然可以在 iOS 上滚动??
【问题讨论】:
-
您是否尝试设置溢出-x 和溢出-y 而不是溢出?或者,可以在#lbBlack div 本身而不是主体上设置溢出-x、溢出-y 或溢出属性。
-
刚刚试过了,也没用...
-
请稍等我发誓我以前经历过。让我在 jsFiddle 上摆弄一下。能否请您发布相关的html和css?
-
我什至会给你几个小时,因为我现在需要睡觉 :) 谢谢!
-
啊,好吧,哈哈。是的,如果你发布一些 html 和 css 来配合它,我会检查一下。
标签: javascript ios css safari lightbox