我已自己找到引擎的bug并加以修复了。
先说第3个问题,qq浏览器问题:
因为浏览器的resize事件会先触发然后在更新window.innerHeight属性,因此导致取得的window.innerHeight是旋转前的值
解决方法:修改21178行,在resize事件处理函数中增加一个延时100毫秒再执行重置画布即可
第1和第2个问题,直屏旋转到横屏后出现空白和点击错位问题:
因为ios的safari在横屏状态下,document.body.clientHeight会比window.innerHeight高,因为ios的safari全屏模式是根据document.body.clientHeight高度是否超过window.innerHeight且用户手动滚动页面时才会自动变成全屏的,旋转横屏后屏幕高度太窄,所以浏览器自动让document.body.clientHeight高于window.innerHeight,这样用户会自然的滚动进入到全屏模式了。
然后我看了下引擎本身就封装了Browser.clientHeight(获取优先级看引擎上的注释),但在21184行的位置没有使用该方法,而是重新写了获取高度的方式,并且其中一句是错误的“Browser.window.__innerHeight”,请对照4091行
解决方法:修改21184行,改成 _me._safariOffsetY=Browser.clientHeight-Browser.window.innerHeight; 即可
修改后的laya.core.js,先定位到21176行[code]window.addEventListener("resize",function(){
setTimeout(function(){
var orientation=Browser.window.orientation;
if (orientation !=null && orientation !=_$this._previousOrientation && _me._isInputting()){
Input["inputElement"].target.focus=false;
}
_$this._previousOrientation=orientation;
if (_me._isInputting())return;
if (Browser.onSafari)
_me._safariOffsetY=Browser.clientHeight-Browser.window.innerHeight;
_me._resetCanvas();
},100);
});[/code]