问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js或者css有什么办法强制设置ipad横屏显示

发布网友 发布时间:2022-04-19 18:48

我来回答

1个回答

热心网友 时间:2022-04-06 15:11

对于移动端的轻量级 HTML5 互动小游戏(简称为 H5 轻互动),如果从屏幕呈现模式来划分的话,可以归类为:竖屏式和横屏式。


HTML5互动小游戏案例截图

平常我们做过的需求里,主要是以竖屏式为主,而横屏式较少。对于竖屏式场景来说,大家的经验会比较丰富,因此,此次主要式探讨下横屏式场景下的一些需要注意的点,特别是怎样去做横屏适配。

对于 H5 轻互动游戏来说,要实现横屏的话,主要是解决两点:
1.无论用户手持方向如何,都需要保证屏幕横向显示。
2.由于屏幕分辨率的多样化,因此就算是横屏下也是需要进行横屏适配,保证画面在所有分辨率下都能够合理适配。

下面,我们针对这两点分别阐述如何解决。

强制横屏显示

页面内容显示方向可分为竖排方向和横排方向,如下图所示。


页面内容显示方式:竖向排版和横向排版

对于竖屏式 H5 轻互动来说,页面会被期望保持竖排方向显示。而如果页面出现横排方向显示的情况,开发者往往会选择利用提示蒙层来进行友好提示,让用户自主保持竖屏体验,如下图所示。


提示蒙层提醒用户保持竖屏体验

同样地,在横屏式 H5 轻互动游戏中可以采取相同的措施进行简单处理,在页面内容按竖排方向显示时,开发者进行对用户提示其保持横屏体验。

但是,这对用户体验并不友好,因为这对于那些习惯于打开锁定为竖排方向功能(如下图所示)的 iOS 平台用户,或者是关闭屏幕旋转功能(如下图所示)的 Android 平台用户来说,他们需要多一个处理步骤——先关闭竖排方向锁定或是开启屏幕旋转,然后再横向手持设备。


竖排方向锁定功能(iOS)与屏幕旋转(Android)功能

因此,更好的做法是强制横屏显示,对屏幕 resize 事件进行监听,当判断为竖屏时将整个根容器进行逆时针 CSS3 旋转 90 度即可,代码如下所示。

1234567891011121314151617181920212223242526
// 利用 CSS3 旋转 对根容器逆时针旋转 90 度var detectOrient = function() {var width = document.documentElement.clientWidth,height =  document.documentElement.clientHeight,$wrapper =  document.getElementById("J_wrapper"),style = "";if( width >= height ){ // 横屏style += "width:" + width + "px;";  // 注意旋转后的宽高切换style += "height:" + height + "px;";style += "-webkit-transform: rotate(0); transform: rotate(0);";style += "-webkit-transform-origin: 0 0;";style += "transform-origin: 0 0;";}else{ // 竖屏style += "width:" + height + "px;";style += "height:" + width + "px;";style += "-webkit-transform: rotate(90deg); transform: rotate(90deg);";// 注意旋转中点的处理style += "-webkit-transform-origin: " + width / 2 + "px " + width / 2 + "px;";style += "transform-origin: " + width / 2 + "px " + width / 2 + "px;";}$wrapper.style.cssText = style;}window.onresize = detectOrient;detectOrient();

但是!这里有坑:如果你是采用 CreateJS 框架进行开发,那么就不能通过 CSS3 途径对包含 Canvas 的根容器进行旋转处理,因为旋转后会导致 Canvas 内的舞台元素的事件响应位置错乱。
解决办法是,换成利用 CreateJS 框架内的 Stage 的 rotation 属性对整个舞台旋转处理,代码如下:

12345678910
if(self.isPortrait) { // 竖屏// 舞台旋转self.stage.x = self.canvasHeight; // 注意:x偏移相当于旋转中点处理,更简单self.stage.rotation = 90;// more...}else { // 横屏self.stage.x = 0;self.stage.rotation = 0;// more...}

横屏适配处理

面对移动端多分辨率繁复冗杂的情况,我们对于一般情况下(也就是常见的竖屏式)页面适配处理可以说是烂熟于心,但是切换到横屏式场景下,同样的页面适配方法可以直接应用吗?会不会有什么问题呢?

下面笔者分别从 DOM 和 Canvas 两方面去着手阐述如何做横屏适配处理。

解决 DOM 的横屏适配问题

在移动端,常见的移动端适配方案是 REM 方案,而为了减少 JS 与 CSS 的耦合,笔者团队开发页面时采用的是 VW + REM 方案。(想要了解该方案的同学可详细阅读《利用视口单位实现适配布局》)。

因为页面适配的场景往往是竖屏式的,因此 VW + REM 方案表现得十分完美。但是遇上横屏式,它的缺点就暴露了出来。


现行的 vw 单位适配方案带来的问题

如上图所示,由于响应断点的*最大宽度处理,会导致页面两侧留白,当然这可以通过去掉最大宽度*来解决。而真正的缺点在于,由于 vw 单位的特性,适配换算大小是根据屏幕宽度而言的,因此屏幕宽度越大导致容器、文字会越大,还可能导致 DOM 元素超出屏幕外,且文字过大并不是我们所想要的用户体验。

那么,换成 px 单位的固定布局如何?

但 px 单位的固定布局只适合于部分场景,对于需要内容全屏覆盖的场景(如下图所示),就可能存在这样的不理想的用户体验:绝对定位的元素之间空隙过大,导致布局不美观,又或者空隙过小,导致元素叠放被遮挡。


px单位固定布局适配方案带来的问题

我们了解到,vw 单位的特点是适配换算大小时是根据屏幕宽度而定的,那么在强制横屏显示时,我们就可以同理转换为屏幕高度来而定,也就是 vw 单位替换成 vh 单位。

这样进一步改良之后就会得到满意的适配效果,如下图所示。


更好的适配解决方案—— vw、vh 单位搭配

具体实现可参考如下 SCSS 代码:

123456789101112
$vw_base: 375;$vw_fontsize: 20;html {font-size: 20px; //不支持vw单位时,回退到px单位font-size: ($vw_fontsize / $vw_base) * 100vw;}@media screen and (orientation: landscape) {html {font-size: 20px;font-size: ($vw_fontsize / $vw_base) * 100vh;}}

解决 Canvas 的横屏适配问题

解决 Canvas 的横屏适配问题,目前在实际应用中有两种主流的方案:

为什么浏览器不能横屏显示了呢?

可能的原因之一:浏览器设置问题 浏览器无法横屏的原因之一,可能是因为用户在浏览器设置中开启了竖屏锁定功能。此时,无论用户怎样旋转设备,浏览器都无法自动横屏。如果想要解决这个问题,用户可以进入浏览器的设置页面,关闭竖屏锁定功能,或者调整其设置选项,使其支持横屏显示。可能的原因之二:CSS样式...

ios中屏幕怎么强制横屏显示

主屏幕横屏的话只有iPad和iPhone6P(标准模式)可以,由底部上拉控制中心,点击锁定横屏(像锁一样的标识符)。越狱之后,进Cydia安装Rotate+插件。 Rotate+是一款可以让 iPhone 6 或者 iphone 5s 等机型体验 iphone 6 Plus 的横屏显示功能,目前插件仅支持 ios8 以上系统。横屏模式拥有 ipad 的分屏...

浏览器无法横屏怎么回事

首先,浏览器自身的设置可能是问题的关键。部分用户可能在浏览器设置中误开启了竖屏锁定功能,导致无论设备如何旋转,浏览器都无法自动调整为横屏模式。解决方法是进入浏览器设置,关闭这个锁定选项,或者调整设置以支持横屏显示。其次,CSS样式也可能成为障碍。如果网页设计者在CSS中设置了固定宽度或高度的元...

如何用CSS或者JS设置一张图片,让手机横屏(宽480)看或者竖屏(宽320...

图片宽度设成100%,理论上不是单色图案、重复背景图案、或js动态生成的画布上的矢量图,jpg之类的是没办法满屏的,320的时候满屏了,横过来看480的时候,高度又少了,可视区外还有一截。

为什么我的浏览器无论怎么旋转都是竖屏?

首先,浏览器的设置可能是问题的关键。用户可能在浏览器设置中误开启了竖屏锁定功能,导致无论怎样旋转设备,浏览器都无法横屏显示。解决方法是进入浏览器设置,关闭这个锁定选项,或者调整设置以支持横屏模式。其次,CSS样式也可能成为阻碍。网页设计者如果在CSS中设置了固定宽度或高度的元素,当设备旋转时...

css控制页面再不同分辨率下显示相对大小

方法一:所有布局用百分比布局,这种方法是比较传统的。方法二:百分比和em(一个字符的单位)相结合的;方法三:rem为单位来写样式,需要借助JS来根据分辨率的大小调整rem;方法四:布局用rem单位,而字体用em.第1、2两种方法是比较传统,网上随便搜搜就找得到了;第3种开始用到的rem,rem是css3新出的...

苹果怎么打开js文件?

1、点击网络共享中心,找到左上角的“更改适配器设置”2、点击更改适配器设置,找到“本地连接”3、选择”IPV4"右键点击”属性“4、选择'IPV4,点击属性,修改DNS iPad我的世界用百度云下载了js怎么用,成功了给分以js为扩展名的文件,是用javascript脚本语言编写的.js文件常见的有两种用法。1.在网页里...

html或者js能否设置网页强制用兼容模式加载?

1、前端html页面中加入如下头信息,强制在IE高版本向下兼容到以IE8运行: 如果样式效果用的比较新潮的css3,改成IE=9,尽可能让一些样式生效 如果样式还未满意,就只能修改页面样式了。2、针对支持插件和不支持插件的浏览器走不同的分支,支持插件的浏览器就走插件的流程,不支持插件的浏览器保证其他...

禁用javascript什么网页都打不开(禁用javascript后果)

浏览器禁用了javascript致使网页显示不正常怎么办1、网页显示javascript错误的解决办法:首先打开浏览器,选择Internet选项;然后切换到安全标签页中,单击自定义级别进入;接着选择“启用”项,并点击“是”;最后退出设置即可。请多刷新几次或者把浏览器关掉再打开。2、你的网页使用了JS来控制网页布局和效果...

js可以替代html和css吗(代替js的语言)

从性能的角度看,纯JS生成DOM自然赶不上直接的markup。同样的道理,就算用CSS预处理器也都会在部署时预先编译——尽管在运行时可以做出更牛逼的特性(然而实际上目前我不知道有任何CSS预处理器干了这样的事情——因为它们都是按照预编译的场景设计的),再如HTML/CSS是按照渐进显示优化的(页面不用全下载...

ipad无法横屏怎么办 ipad怎么设置一直横屏 ipad有些app不能横屏 ipad怎么横屏竖屏切换 ipad竖屏横屏怎么调 ipad如何设置自动横屏 ipad只能横屏不能竖屏 ipad横屏竖屏切换不了 ipad横屏竖屏切换在哪里
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
五瘟神者道教的瘟神 财神赵公明形象 苹果手机怎么查找去过的位置记录 怎么查找苹果手机最近去过什么地方? 小米手机怎样设置闹钟? 好女孩与坏女孩基本信息 小米1S设置闹钟之后关机,到了闹钟开机时间一直处于动画MI的状态时什么... 圣萨尔瓦多岛东太平洋圣萨尔瓦多岛 科隆群岛地理特点 求跪《好女孩(THE GOOD GIRL)》英文字幕。。。 想做一个创意H5,请问要怎样构思比较好 怎样制作h5页面 如何禁止手机端html5页面横屏显示 最炫酷的h5怎么实现的 在易企秀等h5制作工具中,横图可以左右滑动,就是... 这个H5现有多少种表现形式? H5页面怎么做? h5 页面在横屏时,页面乱掉怎么办 怎么让html5的video横屏播放 html 5web端 video 竖屏怎么变横屏 h5直播的实现方式判断直播是横屏还是竖屏 微信互动h5有哪些形式? 我用wps秀堂做了一个h5横屏版,放手机上用浏览器打... 纯H5开发的webAPP 安卓端可以横屏,但是ios端不能... 如何制作横屏h5 有办法做出横版 横屏的h5吗? 笔记本电脑突然开不了机所有的指示灯都不亮,怎么... 笔记本无法开机怎么办? “婵”的读音是什么? 尊严比生存更重要(辩词) h5布局设置大小不一框框的代码 十大液晶电视品牌 液晶电视买什么品牌好? 求十大液晶电视排行榜,有哪些比较推荐? 液晶电视的优缺点? 液晶电视哪个牌子的好 液晶电视哪个牌子好? 液晶电视都有多少寸的? 液晶电视尺寸大全 液晶电视 现在的液晶电视机什么牌子好? 液晶电视的分类以及功能有哪些? 液晶电视是什么? 液晶电视机什么品牌质量好? 什么是液晶电视 什么叫智能液晶电视机? 哪个牌子的液晶电视好一点? 20元优享礼包怎么退订 合同那个收款帐户信息怎么填啊? 收款账号是什么