打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
移动端如何让页面强制横屏

最近公司要开发一个移动端的养成类网页游戏(就是用手点各种按钮最后你会找到一个女朋友=。=),要求横屏显示,不能竖屏。
有经验的你肯定知道,当用户竖屏打开时,提示说你要把手机转过来是在是件很傻×的事情。这时如果用户没开启手机里的横屏模式,还要逼用户去开启。这时候用户早就不耐烦的把你的游戏关掉了。
我先进行了调研,想看有没有现成的api。参考过screen的api以及manifest方法 ,实验结果当然是不行。
那么现在我唯一能想到的解决办法,就是在竖屏模式下,写一个横屏的div,然后把它转过来。

好了我的测试页面结构如下:

<body class="webpBack">  <div id="print">      <p>lol</p>     </div></body>

很简单对不对,最终的理想状态是,把lol非常和谐的横过来。
好了来看看区分横屏竖屏的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在竖屏模式下横过来,横屏状态下不变。所以在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%'); }

在这里我们先取得了屏幕内可用区域的宽高,然后根据宽高的关系来判断是横屏还是竖屏。如果是竖屏,就把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);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
css3动画梳理
三种纯CSS实现三角形的方法 | Hey@feelcss
支持ie firefox jQuery遮罩层
CSS实现带阴影的三角形
用CSS代码写出的各种形状图形的方法_CSS_网页制作_脚本之家
CSS3 画基本图形,圆形、椭圆形、三角形等
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服