最近工作中写了一个移动端的页面,本来是没什么的,但是有一个要求感觉很奇怪,从前也没有遇到过,就是我写的这个页面需要放在一个APP中,但是这个APP是横屏的,打开这个页面的webview也是横屏的(最新版的APP打开的时候是竖屏的webview),本来我们是用的rem布局,横屏的状态下也是没有什么问题的,但是甲方希望在横屏打开的时候强制这个页面竖屏显示。所以就有了下面一系列的操作了。

首先是判断横屏的状态,使用的一下的代码:

function orient() {

if(window.orientation == 90 || window.orientation == -90) {//横屏

//ipad、iphone竖屏;Andriod横屏

//$("body").attr("class", "landscape");

//orientation = 'landscape';

//alert("ipad、iphone竖屏;Andriod横屏");

$("p").text("横屏");

return false;

} else if(window.orientation == 0 || window.orientation == 180) {//竖屏

//ipad、iphone横屏;Andriod竖屏

// $("body").attr("class", "portrait");

// orientation = 'portrait';

//alert("ipad、iphone横屏;Andriod竖屏");

$("p").text("竖屏");

return false;

}

}

//页面加载时调用

$(function() {

orient();

});

//用户变化屏幕方向时调用

$(window).on('orientationchange', function(e) {

orient();

});

这个就是在监测手机的方向。但是,因为打开的这个APP的时候就是横屏打开的,多以这个是没办法监测到的,而且这个还有一个前提就是手机必须打开了自动旋转才是可以的。所以上面的方法被抛弃了。

既然智能的办法被抛弃了,那就用最贱的办法,就是监测屏幕的宽度和高度。当高大于宽的时候,我们默认手机是竖屏的状态,当宽大于高的时候,我们认为是横屏的状态。(当然了这个也是有局限的,但是考虑到新的APP中已经把横竖屏的问题解决了,这里就姑且这么做了)。当竖屏的状态我们是不需要做什么的。但是在横屏的状态下,我们就要把页面转动90度了。废话不多说,直接看代码:

// 利用 CSS3 旋转 对根容器逆时针旋转 90 度 强制用户进行竖屏显示

var detectOrient = function() {

var width = document.documentElement.clientWidth,

height = document.documentElement.clientHeight,

//$wrapper = document.getElementsByTagName("body")[0],

$wrapper = document.getElementById("vue"),

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;";

style += "font-size:" + (width * 100 / 1125) + "px";

var html_doc = document.getElementsByTagName("html")[0];

html_doc.style.cssText = "font-size:" + (width * 100 / 1125) + "px";

} else { // 竖屏

style += "width:" + height + "px;";

style += "min-height:" + width + "px;";

style += "-webkit-transform: rotate(-90deg); transform: rotate(-90deg);";

// 注意旋转中点的处理

style += "-webkit-transform-origin: " + height / 2 + "px " + (height / 2) + "px;";

style += "transform-origin: " + height / 2 + "px " + (height / 2) + "px;";

//style += "font-size:" + height * 100 / 1125 + "px;";

//$("html").css({"font-size":(height * 100 / 1125),"overflow-y":"hidden"});

var html_doc = document.getElementsByTagName("html")[0];

html_doc.style.cssText = "font-size:" + height * 100 / 1125 + "px;" + "overflow-y:"+"hidden;"+"height:"+height+"px;";

style += "overflow-y: hidden;";

add_tab();

$wrapper.style.cssText = style;

}

}

window.onresize = detectOrient;

detectOrient();

function add_tab(){

var clone_tab = $("footer").clone();

$("footer").remove();

clone_tab.css({"transform":"rotate(-90deg)","transform-origin":"top right"})

$("body").append(clone_tab);

clone_tab.css({"position":"fixed","right":"1.77rem","bottom":"4rem","left":"auto","top":"0","width":"11.25rem","height":"1.77rem"})

}

相信这段代码对于前端人员来说不是很难,但是有一点需要注意的有三点。

第一点:

最开始的时候我是为了方便直接旋转的整个的html,这个是时候会有一个问题,就是页面中的fixed定位的元素,定位就不管用了(代码中的就是作为tab切换放在底部的);这个就需要我们更改了,既然旋转父元素,子元素就不管用了,那我们就不要旋转父元素了,直接旋转他的兄弟元素就可以了。我这里是旋转的一个叫做#vue的元素,因为我的页面中的其他的内容全部是在这个div当中的。所以我就旋转了这个元素。然后这个时候定位是可以用的,但是样式不对,所以在我的add_tab这个函数中就是在调整这个元素的大小和样式,让他能正常的显示在屏幕的右侧,也就是竖屏的状态下,屏幕的底端。

第二点:

第二点需要注意的是,应为我用的是rem布局,多以我会更改html的font-size,但是这个时候就要小心了,当我们旋转过来之后,宽变成了高,高变成了宽,所以我们需要用height来计算根目录的字体大小。

第三点:

第三点就是在程序中注明的,需要我们注意旋转的中心,默认的旋转中心是在所选元素的中心点。多以我们要改变旋转的中心点。旋转之后还要把html的overflow-y:hidden。否则就会出现多余的滚动。

这样的话,基本上就把整个页面旋转过来了,并且把底部的fixed定位的元素再次定位成功了。比较幸运的是我们用的弹窗是用的layui的弹窗,再把这个弹窗旋转90度就可以了。

ps:最后发现一点问题是没办法解决的,就是当页面够长的时候,也就是有滚动条的时候,弹窗出来以后,滑动后面的遮罩层的话,后面的页面会向上滑动。这个本来是可以解决的,我上面的这个文章就是利用fixed定位解决的,但是因为旋转了,这个失效了,所以就没有好的办法了。在竖屏状态下是没问题的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

html页面禁止竖屏,关于移动端页面强制竖屏的方法相关推荐

  1. 如何禁止视频在手机移动端页面中全屏播放

    最近公司的项目中出了需要在局部播放视频的需求,我们都知道HTML5中有一个专门的标签video用来嵌入视频.不过,这个video标签有很多的属性可能很多同学并不是很熟悉,下面我们来认识一下: 在网页里 ...

  2. 在H5移动端开发强制竖屏,横屏时提示

    1.不同的浏览器有不同的做法,参考如下: <!-- uc强制竖屏 --> <meta name="screen-orientation" content=&quo ...

  3. android强制分屏软件,oppo第三方强制分屏软件app,OPPO第三方强制分屏软件app安卓版预约 v1.0.0-手游汇...

    oppo第三方强制分屏软件app是一款专门为oppo手机的用户们提供的助手.安装之后可以享受到永久的免费服务,在任何的情况下都可以按照自己的想法进行,一边看剧一边游戏,为生活带来更多的科技感,所有想要 ...

  4. html 设置移动端页面滚动,a.html · 焚心/移动端页面上下滚动加多页面上拉加载功能及mescroll插件的使用 - Gitee.com...

    我的 我的 交易记录 可兑换签纸贺 兑换历史 活动名称:{{item.title}} 有效期至:{{item.time}} 合计可用额: {{item.price}}元 去兑换 交易记录: 兑换10. ...

  5. Android 12.0 锁屏页面禁止下拉状态栏

    目录 1.概述 2.锁屏页面禁止下拉状态栏的核心类 3.锁屏页面禁止下拉状态栏的核心功能分析和实现

  6. css3 移动端video视频全屏,横屏展示,适配微信/打包成app

    参考链接: 全屏旋转 https://blog.csdn.net/nidunlove/article/details/51944527 ios进度条滑动方向判断 https://www.cnblogs ...

  7. 如何快速开发一个响应式移动端页面

    适用领域 1.非工程化项目(不需要webpack之类的打包) 2.html+css页面数少的项目(例如:app下载页面.抽奖活动页面) 3.其实pc端页面也适用的,但用的少(例如:大屏数据可视化页面) ...

  8. 图上上传页面设计_无线端页面设计“三大雷区”

    无线视觉规范 手机端页面的设计有许多的规范,大到涉及整个页面的排版呈现方式,小到一个icon的尺寸大小,这都关系到视觉页面的美观程度以及用户体验设计.所以应该积极主动去分析深入了解并研究出可行的解决方 ...

  9. 【移动端网页布局】移动端网页布局基础概念 ⑧ ( 移动端页面布局方案 | 单独制作的移动端页面 - 主流 | 响应式页面兼容移动端 - 开发难度较大 )

    文章目录 一.移动端页面布局方案 1.单独制作的移动端页面 2.响应式页面兼容移动端 一.移动端页面布局方案 移动端页面方案 : 单独制作的移动端页面 : 主流开发方案 , PC 端 与 移动端 访问 ...

最新文章

  1. java之Thread.sleep(long)与object.wait()/object.wait(long)的区别及相关概念梳理(good)
  2. linux 查看网络连接数
  3. 模块计算机型x86yu,ldd3学习之九:与硬件通信
  4. 利用nf_conntrack机制存储路由,省去每包路由查找
  5. [数分提高]2014-2015-2第9教学周第1次课 (2015-04-28)
  6. KVM Tracing, perf_events
  7. Spring Cloud与微服务学习总结(8)——Spring Boot、微服务架构和大数据治理三者之间的故事
  8. 计算机操作系统哪几部分组成,计算机操作系统的组成部分
  9. macos可以升级到指定版本吗_错过Mac OS升级,找不到旧OS版本怎么办?
  10. 云南通报5起森林火灾,如何去扑救?如何自救?
  11. redis 缓存防止击穿
  12. 弹跳蚂蚱 Jumping Grasshopper
  13. 数据库查找姓李的人_数据库基本查询方法等
  14. provider: SQL Network Interfaces , error: 26 - Error Locating Server / Instance
  15. 计算机图形学的进展与展望
  16. Openlayers与GeoServer:跨域配置与WMS服务加载
  17. 【linux基础】18、进程管理工具
  18. 点密度、线密度与核密度
  19. vscode 切换开发者工具_vscode 切换开发者工具_VSCode高效开发工作流配置指南
  20. Recipe terminated with fatal error: spawn latexmk ENOENT.

热门文章

  1. Chrome插件安装办法【PC端】
  2. codeforces 283C Coin Troubles(背包DP)
  3. perl and LWP 文档
  4. NLP与对比学习的巧妙融合,简单暴力效果显著!
  5. Android开发——错误:远程主机强迫关闭一个现有连接——解决办法
  6. 连平县新视界-连平2018年公开招聘教职员66人
  7. 为原型产品推荐的四款设计工具
  8. 【Java】每日一点Java小知识 --- day6
  9. 爬虫 第六讲 Scrapy框架
  10. 2020使用html、js、正则表达式做一个前端注册表单信息验证