Javascript 在设备方向更改期间隐藏DOM元素?
当在浏览器中打开stackoverflow等移动设备(低端/中端)上更改方向时,会在一小段时间内看到明显的白色区域。见下面的gif 在Chrome中为您自己、open或任何具有大量DOM元素的站点复制。按Javascript 在设备方向更改期间隐藏DOM元素?,javascript,css,dom,orientation,Javascript,Css,Dom,Orientation,当在浏览器中打开stackoverflow等移动设备(低端/中端)上更改方向时,会在一小段时间内看到明显的白色区域。见下面的gif 在Chrome中为您自己、open或任何具有大量DOM元素的站点复制。按f12,按ctrl+shift+m(打开设备工具栏),选择一个设备并将Online更改为例如Mid tier mobile,然后只需单击旋转按钮,即可观察白色区域 当然,根本原因是存在的DOM元素的数量(它们本身不必在视口中)。如果您要执行与上述相同的操作,例如,在本问题的第页上,很难观察到滞
f12
,按ctrl+shift+m
(打开设备工具栏),选择一个设备并将Online
更改为例如Mid tier mobile
,然后只需单击旋转
按钮,即可观察白色区域
当然,根本原因是存在的DOM元素的数量(它们本身不必在视口中)。如果您要执行与上述相同的操作,例如,在本问题的第页上,很难观察到滞后/白色区域
一个解决方案是隐藏那些包含大量DOM元素的容器,为了进一步提高性能,隐藏掉在视口之外的元素(具有给定的安全区域)
但是,不幸的是,没有什么东西可以利用,ondeviceorientationStart
和ondeviceorientationnd
,也没有媒体查询。。。所以问题是,是否有一种钩子/技术可以在方向改变期间隐藏元素
编辑:正如建议的那样,resize
事件是我们所有人的起点。然而,这件事来得很晚。如果我们继续使用stackoverflow站点并隐藏所有元素,则在发生方向更改后,这些元素将被隐藏。片段:
window.addEventListener("resize", function() {
var els = document.querySelectorAll(".-summary"),
i = 0,
l = els.length;
for (i; i < l; i++) {
els[i].style.display = "none";
}
});
window.addEventListener(“调整大小”,函数(){
var els=document.queryselectoral(“.-summary”),
i=0,
l=长度;
对于(i;i
您可以在css媒体查询中使用此选项:
@media screen and (min-width: 300px) and (orientation: landscape) { }
@media (min-height: 680px), screen and (orientation: portrait) { }
css媒体查询有以下选项:
@media screen and (min-width: 300px) and (orientation: landscape) { }
@media (min-height: 680px), screen and (orientation: portrait) { }
关于
window.onresize
Plusif(window.innerWidth>window.innerHeight)肖像()
。你真的是个无聊的程序员吗?:)比如@ChrisG说,onresize
会给你你想要的,但是你可能想在里面放一些debounce
,以便更好的测量。用建议的resize
更新了这个问题,一开始应该加上这个,我的不好。那么window.onresize
Plus呢(window.innerWidth>window.innerHeight)grait()
。你真的是一个无聊的程序员吗?:)比如@ChrisG说onresize
会给你想要的,但是你可能想在那里放置一些debounce
,以便更好地测量。用建议的resize
更新了这个问题,应该在开始时添加这个,我的不好。通过这些媒体查询,您可以控制横向
和纵向
的状态。但正如问题所暗示的,我正在寻找一种方法来控制方向改变期间的可见和不可见。这将取决于互联网速度、手机硬件等。在我看来,您必须集中精力进行总体优化,这将解决重新渲染问题,如开关方向。正常用户将接受1,1,5秒的延迟。做一个专业的记忆测试,你就会解决这个问题。在进一步的实验之后,我恐怕不得不解决这个白色区域。事实上,我发现一个优化方法是降低对比度,所以白色没有那么突出。再次,使用工具查看交通。这将向您展示您是否让用户摆脱了性能问题。此外,我认为白色是来自身体,你可以尝试改变这种颜色,如果你认为是一个更好的UX。用这些媒体查询,你可以控制的状态<代码>景观< /代码>和<代码>肖像< /代码>。但正如问题所暗示的,我正在寻找一种方法来控制方向改变期间的可见和不可见。这将取决于互联网速度、手机硬件等。在我看来,您必须集中精力进行总体优化,这将解决重新渲染问题,如开关方向。正常用户将接受1,1,5秒的延迟。做一个专业的记忆测试,你就会解决这个问题。在进一步的实验之后,我恐怕不得不解决这个白色区域。事实上,我发现一个优化方法是降低对比度,所以白色没有那么突出。再次,使用工具查看交通。这将向您展示您是否让用户摆脱了性能问题。此外,我认为白色是从身体,你可以尝试改变这种颜色,如果你认为将是一个更好的UX。