我在使用sencha touch 2
应用程序时遇到了同样的问题,因为这与ExtJS
我为您提供的解决方案相同,
这可能是框架中的一个错误,当 ExtJS 在浏览器填充之前渲染应用程序时发生这种情况可能是正确的window.innerWidth
,window.innerHeight
因此视口不能采用正确的宽度和高度。这也解释了事件的随机性。这在手机上使用时会变得更加突出,这可能是因为资源有限且响应缓慢。
我为处理这个可能而采取的解决方案不是一个好的解决方案,但考虑到我找不到更好的解决方案是框架本身的故障,
我轮询正确height
和width
每说 100 毫秒后浏览器的大约一秒钟,以获得正确的窗口高度和宽度,如果我发现高度或宽度不viewport
一样,我会重新调整它。因为您正在使用 ExtJS 并且应用程序将在高性能系统上运行(与移动电话相比),我会推荐一个更小的间隔,然后为了安全起见,它会轮询一个更大的时间段。
继承人我当前使用的代码根据您的需要编辑
var aId = setInterval(function () {
if (Ext.Viewport.getWidth() !== window.innerWidth || Ext.Viewport.getHeight() !== window.innerHeight) {
Ext.Viewport.setSize(window.innerWidth, window.innerHeight);
clearInterval(aId);
}
num = num + 1;
if (num > 10) {
clearInterval(aId);
}
}, 100)
我目前在应用程序中使用此代码launch function
。但是您也可以在show
事件中viewport
使用它,您应该将间隔时间保持在尽可能短的时间以避免任何滞后。
如果您认为此应用程序可能会在用户更改窗口高度和宽度的设备上使用(例如当方向更改时移动浏览器,或者如果您认为用户会更改浏览器窗口的height
和width
)。然后只需在视口中复制并粘贴相同的代码片段,resize event
以便在视口大小发生变化时也轮询和调整视口大小。