我已经创建了该功能,以便在移动设备上处理一些全屏大小调整问题。它工作得非常好但是不会多次重新计算高度值(仅在加载时计算,而不是在方向更改时计算)。我添加了警报,以证明它没有多次运行计算。任何有关允许在每个方向变化上计算此值的帮助都将非常感激。
jQuery :(仅在移动设备上运行或检查移动配置)
function resizeBackground() {
$(".header__container").removeAttr('style');
var fixedHeight = $(window).height();
var bg = $(".home-carousel, .flickity-viewport, .flickity-slider, .carousel-cell, .header__container, .site-header--drawer .nav-bar");
var softScroll = $(".soft__scroll--container");
var squiggle = $(".squiggle__container");
var slideNumbers = $(".slide__numbers");
bg.height(fixedHeight);
softScroll.css('top', fixedHeight - 50 + "px");
slideNumbers.css('top', fixedHeight - 140 + "px");
squiggle.css('padding-top', 10 + "px");
console.log(fixedHeight);
}
if(isMobile.any()) {
$(window).on("load resize", function(event) {
resizeBackground();
});
}
答案 0 :(得分:2)
orientationchange timing
orientationchange
事件与时间相关的时间 客户height
和width
的更改不同 浏览器,虽然当前的实现会给你正确的 来自event.orientation
的{{1}}的值。这个 表示如果您的绑定依赖于window.orientation
和height
您可能希望完全禁用width
的值orientationChange
让后备$.mobile.orientationChangeEnabled = false
代码会触发您的绑定。
https://api.jquerymobile.com/orientationchange/
因此,您可能会停止收听resize
或为您的功能添加timeOut。
以下代码运行正常(我添加了Firefox用户代理):
orientationchange
$(document).ready(function() {
var isMobile = {
Android: function() {
return navigator.userAgent.match(/Firefox/i);
},
BlackBerry: function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function() {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function() {
return navigator.userAgent.match(/IEMobile/i);
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
function resizeBackground() {
var fixedHeight = $(".header__container").height();
var bg = $(".home-carousel, .flickity-viewport, .flickity-slider, .carousel-cell, .header__container, .site-header--drawer .nav-bar");
var softScroll = $(".soft__scroll--container");
var squiggle = $(".squiggle__container");
var slideNumbers = $(".slide__numbers");
bg.height(fixedHeight);
softScroll.css('top', fixedHeight - 50 + "px");
slideNumbers.css('top', fixedHeight - 140 + "px");
squiggle.css('padding-top', 10 + "px");
alert(fixedHeight);
}
if (isMobile.any()) {
$(window).on("load resize", function(event) {
resizeBackground();
});
}
});
您确定您的用户代理是否匹配?
答案 1 :(得分:1)
.header__container
,orientationchange
或load
点击resize
时,您希望$(window)
更改身高。
它 ... 如果它在height
属性中没有设置style
,则由前一次运行{ {1}}(来自resizeBackground()
)。
您需要先删除此属性,以允许bg.height(fixedHeight);
调整大小并为您提供正确,更新的.header__container
。
将其添加为.height()
中的第一行,它将按预期工作:
resizeBackground()
您可以在此录音中看到该脚本正常运行:https://youtu.be/z2spumFbuRs
或者,您可能希望将$(".header__container").removeAttr('style');
定义为:
fixedHeight
...这会稍微便宜一些,因为在获取标题高度之前它并不意味着DOM操作和调整大小(在移除var fixedHeight = $(window).height();
之后恰好是100vh
)。
最后一件事:如果你绑定style
,则resize
上的绑定毫无意义,因为如果没有orientationchange
,orientationchange
就不会发生。此外,您可能希望撤消对resize
的调用,并且不允许其运行超过20次/秒。