QQ浏览器等window.innerHeight首次读取的高度不正确的解决办法
问题描述
移动端的页面,需要处理首屏为一满屏。并且,采用javascript计算高度来设置容器高度的方案。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
html, body {
text-align: center;
}
#main {
height: 100%;
}
.content {
position: relative;
}
.top {
position: absolute;
top: 50px;
width: 40%;
left: 30%;
}
.bottom {
position: absolute;
bottom: 0;
width: 40%;
left: 30%;
}
.desc {
position: relative;
margin-top: 50px;
}
</style>
</head>
<body>
<!--需要满屏显示的内容-->
<div id="main">
<div class="content">
<div class="top">
第一屏最顶部的内容
</div>
<div class="bottom">
第一屏最底部的内容
</div>
</div>
<div class="desc">
第二屏的内容
</div>
</div>
<script type="text/javascript">
var domReady = function(callback) {
var readyRE = /complete|loaded|interactive/;
if(readyRE.test(document.readyState)) {
callback();
} else {
document.addEventListener('DOMContentLoaded', callback, false);
}
};
domReady(function() {
var content = document.querySelector('.content');
content.style.height = window.innerHeight + 'px';
});
</script>
</body>
</html>
测试的时候发现,在QQ浏览器中,首次访问的时候,底部的部分内容未显示出来。刷新页面以后,页面显示的内容才正确。
问题分析
从现象来看,底部的内容像是被浏览器自带的菜单栏挡住了,并且首次计算的高度值比实际的区域高度要大。因此,需要测试每次读取的高度值,以及尝试其它方法来读取该高度。
测试结果一
window.innerHeight;
document.documentElement.clientHeight;
经过测试以上两个值发现,首次加载时,前者比后者的值要大。并且,后者的值是符合预期的需求的。
测试结果二
换了个版本的QQ浏览器,发现上述两个值又相同,但是实际元素的显示并不正确。于是,尝试监听了窗口的resize事件,发现加载完成后会触发一次resize。
结果一解决方案
var getScreenHeight = function() {
return document.documentElement ? document.documentElement.clientHeight : window.innerHeight;
};
content.style.height = getScreenHeight() + 'px';
结果二解决方案
var resize = false;
window.addEventListener('resize', function(){
if(!resize) {
content.style.height = getScreenHeight() + 'px';
resize = true;
}
});
补充
之所以采用动态计算高度,是因为相对定位的容器高度为100%时,内部绝对定位的元素,在页面滚动后会重新布局。
QQ浏览器等window.innerHeight首次读取的高度不正确的解决办法的更多相关文章
- windows安装MongoDB进度条卡住,window安装mongo系统错误 2,系统错误5的解决办法(转载)
windows安装MongoDB进度条卡住,window安装mongo系统错误 2,系统错误5的解决办法 转自:https://www.cnblogs.com/sufferingStriver/p/m ...
- Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法
原文:Advanced Installer读取注册表时将Program Files读取为Program Files (x86)的解决办法 今天同事在做安装包的时候,有一个读取注册表路径的需求,需要根据 ...
- 腾讯TT浏览器应用程序发生异常(0xc0000409) 位置为0x027a1f7f 的解决办法
2013年8月26日下午,腾讯TT浏览器 4.8版1000 出现“应用程序发生异常(0xc0000409) 位置为0x027a1f7f ”的错误,导致浏览器自动关闭. 无论重新卸载安装还是 清理系统 ...
- 谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!
谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个 ...
- pandas读取大文件时memoryerror的解决办法
再用pd.read_csv读取大文件时,如果文件太大,会出现memoryerror的问题. 解决办法一:pd.read_csv的参数中有一个chunksize参数,为其赋值后,返回一个可迭代对象Tex ...
- ASP.NET服务器控件在IE10浏览器(非兼容模式)下报脚本错误的可能解决办法
关于IE10出现LinkButton点击无效的情况: 一般高配置的系统如Win7旗舰版SP1系统不会出现这种情况,针对家庭普通版和专业版的用户通过测试都有这种情况,对于开发人员要解决不同 ...
- 用adb pull命令从android系统中读取文件失败的原因及解决办法
问题:使用adb pull命令从android系统中读取文件失败.显示:Permission denied 原因:是由于文件权限原因引起. 使用ls -l命令查看android系统中的 ...
- PHP读取EXCEL时写入数据乱码解决办法
第一步排除excel读取的数据是不是乱码 EXCEL读取时经常会出现乱码,而我们常用的字符集是UTF-8 ,GB2312(GBK) ,这就需要对编码进行转换,但是又不能对纯数字和英文字符转换,否则会乱 ...
- 浏览器被劫持到http://hao.169x.cn/?v=108的解决办法
不管什么浏览器打开都是 http://hao.169x.cn/?v=108 1.下载wmi tool,(微软官网下载,我的下载地址是: http://120.52.73.52/download.mi ...
随机推荐
- UVA 11039-Building designing【贪心+绝对值排序】
UVA11039-Building designing Time limit: 3.000 seconds An architect wants to design a very high build ...
- [51nod1457]小K vs. 竹子
小K的花园种着n颗竹子(竹子是一种茎部中空并且长得又高又快的热带植物).此时,花园中第i颗竹子的高度是hi米,并且在每天结束的时候它生长ai米. 实际上,小K十分讨厌这些竹子.他曾经试图去砍光它们,但 ...
- 94、存储库之MongoDB、mysql
本篇导航: 简介 MongoDB基础知识 安装 基本数据类型 CRUD操作 其它 存储库之mysql 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是 ...
- 安装myeclipse后,打开时弹出:“该站点安全证书的吊销证书不可用”,怎样解决?
1.当弹出"该站点安全证书的吊销信息不可用.是否继续?"的对话框时,点击"查看证书",切换到"详细信息"TAB页,找到其"CRL分 ...
- iOS扩展——Objective-C开发编程规范
最近准备开始系统学习一个完整项目的开发流程和思路,在此之前,我们需要对iOS的开发变成规范进行更系统和详尽的学习,随意对编程规范进行了整理和学习.本文内容主要转载自:Objective-C-Codin ...
- Android 社区App 《窝吧》开源分享
一整个社区模式App的整套代码,包括发布动态,添加.删除好友,添加黑名单,聊天,用户反馈等功能. 相关技术 1 底层使用Bmob后端云,官网: https://www.bmob.cn/ 2 友盟插件, ...
- for循环去重排序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- webpack+vue项目实战(四,前端与后端的数据交互和前端展示数据)
地址:https://segmentfault.com/a/1190000010063757 1.前言 今天要做的,就是在上一篇文章的基础上,进行功能页面的开发.简单点说呢,就是与后端的数据交互和怎么 ...
- 邓_html_选项卡
================================================= ================[ 选项卡 ]================= ======= ...
- P2P结构与Quorum机制------《Designing Data-Intensive Applications》读书笔记8
前文涉及到了很多与Leader相关的算法,大家有木有想过,王侯将相,宁有种乎,既然Leader这么麻烦,干脆还是采用P2P模型吧,来个大家平等的架构.本篇需要和大家探讨的就是多副本下实现民主政治的Qu ...