gpt4 book ai didi

javascript - 如何知道底部导航栏在移动 Safari 中何时可见?

转载 作者:行者123 更新时间:2023-11-28 03:03:18 31 4
gpt4 key购买 nike

所以我遇到了这个问题,单击页面底部的固定按钮会向上滑动页面,露出移动 safari 中的底部导航栏,需要再次单击该按钮才能工作。向按钮添加 margin-bottom: 50px; 可以解决此问题,但是当页面滚动时,边距会有点多,因为导航栏会向下滑动。

使用safe-area-inset作为边距并不能解决问题。使用它作为填充可以修复它,但它也会将元素一直拉伸(stretch)到屏幕底部

我还尝试了以下代码,这应该可以防止导航栏隐藏。这可行,但它会扰乱窗口滚动计算和固定位置元素,因此它不能解决我的问题。

html,body{

height: 100%;

overflow-y: scroll;

-webkit-overflow-scrolling: touch;
}

是否有任何方法可以在 mobile safari 中使用 javascript 或 jquery 知道底部导航栏何时可见/隐藏,或者有任何解决方法来解决此问题?

最佳答案

经过多次尝试和错误,我终于找到了解决问题的方法。我正在开发一个类似的网站,页面底部有一个标题而不是按钮,但概念是相似的。

标题在页面滚动时以动画形式进出,并在不活动 2.5 秒后淡入,当导航栏淡入或淡出时,会触发窗口调整大小。如果正在使用移动 safari,则每次标题淡入且没有正确的 margin-bottom 时,都会添加边距。当导航栏出现时,边距将被删除,因此标题保留在导航栏的顶部,没有任何额外的边距。

观看其工作的视频:https://streamable.com/sc20h

代码如下:

var initial = 0;
var animateHeader = false;



//check if using mobile safari [returns true is mobile safari] =====

var ua = window.navigator.userAgent;
var iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);
var webkit = !!ua.match(/WebKit/i);
var iOSSafari = iOS && webkit && !ua.match(/CriOS/i);
//===================================================

//This fades the header in and out on scroll, this can be ignored if working on a button===

function headerAnimate() {
var lastScrollTop = 0;
var delta = 200;
$(window).off("scroll").on("scroll", function (event) {
if (!$(".box").hasClass("showing")) {
var st = $(this).scrollTop();
if (Math.abs(lastScrollTop - st) <= delta)
return;
if (st > lastScrollTop) {
$("header, #profilepopup, .search2 div").fadeOut("fast", "linear", function () {
$("#glassM").css("font-size", "25px")
$("#glassM").attr("class", "fa fa-search")
})

} else {
$("header").fadeIn("fast", "linear")
}
clearTimeout($.data(this, 'scrollTimer'));
$.data(this, 'scrollTimer', setTimeout(function () {
$("header").fadeIn("fast", "linear")
if(iOSSafari && animateHeader){
$("header").css("margin-bottom", "2%").animate({ marginBottom: "60px" })

}

}, 2500))
if (st <= 600 && $("#search").is(":visible")) {
$("#glassM").css("font-size", "30px")
$("#glassM").attr("class", "fa fa-times")
}
lastScrollTop = st;
}
});
}
//==================================================================

//this is where the magic happens=====================

if (iOSSafari) {
initial = $(window).height()
$(window).resize(function () {
if ($(window).height() >= initial && animateHeader === false) {
$("header").animate({ marginBottom: "60px" })
animateHeader = true
} else {
$("header").animate({ marginBottom: "2%" }, function () {
animateHeader = false
})
}
})
}
//======================================================================

关于javascript - 如何知道底部导航栏在移动 Safari 中何时可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60804268/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com