Javascript 在设备方向更改期间隐藏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元素的数量(它们本身不必在视口中)。如果您要执行与上述相同的操作,例如,在本问题的第页上,很难观察到滞

当在浏览器中打开stackoverflow等移动设备(低端/中端)上更改方向时,会在一小段时间内看到明显的白色区域。见下面的gif

在Chrome中为您自己、open或任何具有大量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
Plus
if(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。