最近公司要開發(fā)一個移動端的養(yǎng)成類網頁游戲(就是用手點各種按鈕最后你會找到一個女朋友=驰贷。=)鲸睛,要求橫屏顯示颠猴,不能豎屏关划。
有經驗的你肯定知道,當用戶豎屏打開時翘瓮,提示說你要把手機轉過來是在是件很傻×的事情贮折。這時如果用戶沒開啟手機里的橫屏模式,還要逼用戶去開啟资盅。這時候用戶早就不耐煩的把你的游戲關掉了调榄。
我先進行了調研踊赠,想看有沒有現成的api。參考過screen的api以及manifest方法 每庆,實驗結果當然是不行臼疫。
那么現在我唯一能想到的解決辦法,就是在豎屏模式下扣孟,寫一個橫屏的div烫堤,然后把它轉過來。
好了我的測試頁面結構如下:
<body class="webpBack">
<div id="print">
<p>lol</p>
</div>
</body>
很簡單對不對凤价,最終的理想狀態(tài)是鸽斟,把lol非常和諧的橫過來。
好了來看看區(qū)分橫屏豎屏的css:
@media screen and (orientation: portrait) {
html{
width : 100% ;
height : 100% ;
background-color: white ;
overflow : hidden;
}
body{
width : 100% ;
height : 100% ;
background-color: red ;
overflow : hidden;
}
#print{
position : absolute ;
background-color: yellow ;
}
}
@media screen and (orientation: landscape) {
html{
width : 100% ;
height : 100% ;
background-color: white ;
}
body{
width : 100% ;
height : 100% ;
background-color: white ;
}
#print{
position : absolute ;
top : 0 ;
left : 0 ;
width : 100% ;
height : 100% ;
background-color: yellow ;
}
}
#print p{
margin: auto ;
margin-top : 20px ;
text-align: center;
}
說白了利诺,是要把print這個div在豎屏模式下橫過來富蓄,橫屏狀態(tài)下不變。所以在portrait下慢逾,沒定義它的寬高立倍。會通過下面的js來補。
var width = document.documentElement.clientWidth;
var height = document.documentElement.clientHeight;
if( width < height ){
console.log(width + " " + height);
$print = $('#print');
$print.width(height);
$print.height(width);
$print.css('top', (height-width)/2 );
$print.css('left', 0-(height-width)/2 );
$print.css('transform' , 'rotate(90deg)');
$print.css('transform-origin' , '50% 50%');
}
在這里我們先取得了屏幕內可用區(qū)域的寬高侣滩,然后根據寬高的關系來判斷是橫屏還是豎屏口注。如果是豎屏,就把print這個div的寬高設置下君珠,對齊寝志,然后旋轉。
最終效果如下:
最后策添,這么做帶來的后果是材部,如果用戶手機的旋轉屏幕按鈕開著,那么當手機橫過來之后唯竹,會造成一定的悲劇乐导。解決辦法如下:
var evt = "onorientationchange" in window ? "orientationchange" : "resize";
window.addEventListener(evt, function() {
console.log(evt);
var width = document.documentElement.clientWidth;
var height = document.documentElement.clientHeight;
$print = $('#print');
if( width > height ){
$print.width(width);
$print.height(height);
$print.css('top', 0 );
$print.css('left', 0 );
$print.css('transform' , 'none');
$print.css('transform-origin' , '50% 50%');
}
else{
$print.width(height);
$print.height(width);
$print.css('top', (height-width)/2 );
$print.css('left', 0-(height-width)/2 );
$print.css('transform' , 'rotate(90deg)');
$print.css('transform-origin' , '50% 50%');
}
}, false);
好久之前寫的文章了,沒想到每天都有人來看浸颓。物臂。。
這個東西成品猾愿,請參見:http://www.chubao.cn/s/godness/index.html鹦聪,用手機瀏覽器打開即可账阻。