你真的懂js获取可视区宽高吗

可能你会觉得获取可视区宽高不是很简单吗

原生js获取高度不就是就window.innerHeight一句话的事,可是真的这么简单吗

来看个测试页面,如果页面带有横向纵向的滚动条,我们打印出各个高度进行查看对比

顺便你也可以看看document.body和document.documentElement在各个浏览器的差异;document.documentElement返回的是整个文档的根节点即 html标签;document.body 返回的是DOM对象里的body子节点,即 body 标签

console.log('document.documentElement.clientHeight-'   document.documentElement.clientHeight);
console.log('document.documentElement.scrollHeight-'   document.documentElement.scrollHeight);
console.log('document.documentElement.offsetHeight-'   document.documentElement.offsetHeight);
console.log('document.body.clientHeight-'   document.body.clientHeight);
console.log('document.body.scrollHeight-'   document.body.scrollHeight);
console.log('document.body.offsetHeight-'   document.body.offsetHeight);
console.log('window.innerHeight-'   window.innerHeight);
  1. ie8下各个值

image

  1. ie9下各个值

image

  1. ie10跟ie9一样不列图了
  2. ie11下各个值

image
6. 火狐浏览器下各个值

image

  1. chorme浏览器下各个值

image

通过以上各图对比不难看出(先排除ie8)

window.innerHeight = document.documentElement.clientHeight 滚动条高度;

如果没有滚动条则window.innerHeight = document.documentElement.clientHeight

在来说说ie8

ie8比较特殊不支持window.innerHeight并且html还自带有2像素的边框; 可以通过document.documentElement.offsetHeight - 2 * 2得到window.innerHeight的值

所以ie8的window.innerHeight = document.documentElement.offsetHeight - 2 * 2 = document.documentElement.clientHeight 滚动条高度。

如果没有滚动条window.innerHeight = document.documentElement.offsetHeight - 2 * 2 = document.documentElement.clientHeight

所以获取可视区的高度不是简单的window.innerHeight,真正的可视区高度不应该包括滚动条

/**
*  获取视口宽高 兼容兼容到ie8
*  @param {boolean} flag 标识返回的宽高是否包含滚动条
*  @return {object} {widht: xxx, height: xxx} 视口宽高
/ 
function getViewPort (flag) {if (typeof flag === 'undefined') {return {width: document.documentElement.clientWidth,height: document.documentElement.clientHeight};}if (flag === true) {// ie8 html 有2像素边框 上下, 左右 4像素return {width: window.innerWidth || document.documentElement.offsetWidth - 2 * 2,height: window.innerHeight || document.documentElement.offsetHeight - 2 * 2};}
}

获取文档的宽高呢

通过以上各图的对比,整个文档的高度,可以通过document.documentElement.scrollHeight来获取各个浏览器都比较一致,你也不必纠结到底是用document.body 还是用document.documentElement; 用clientHeight还是offsetHeight

/**
*  获取文档宽高 兼容兼容到ie8
* 
*  @return {object} {widht: xxx, height: xxx} 视口宽高
/ 
function getDocumentPort (flag) {return {width: document.documentElement.scrollWidth,height: document.documentElement.scrollHeight};
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作第七天

今天完成了一个简易的oauth服务器,通过login跳转到oauth保存uri和client_id,等待用户登录判断是否能get到user同时判断用户名和密码是否匹配,重定向到uri同时增加code参数,通过判断是否有code重定向回oauth,如果有code…

网上linux实验平台,Linux操作系统实验教程

第一部分 Linux操作系统基本原理.第1章 Linux操作系统简介1.1 Linux的渊源和发展简史1.2 Linux的基本特性1.3 Linux内核的开发模式与内核版本号1.4 Linux发行版介绍1.5 Linux内核源代码组织结构1.6 学习Linux的辅助软件介绍第2章 Linux的进程管理2.1 进程与进程描述符2.2 进程状…

詹金斯的Maven报告

代码质量是一个敏感的话题。 它会影响您的维护成本以及客户满意度。 更不用说您的开发人员使用代码的动力。 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此,这是一个简短的教程,介绍如何创建一些…

python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!

点击关注我哦一篇文章带你了解矩阵乘法的纯Python实现在《这篇文章》中,我们有简单提到“矩阵乘法”的相关知识,如果你不记得了,可以复习一下这张图片。想起来了没?本篇文章将深入探讨在没有机器学习库的情况下如何从零实现矩阵乘…

Github Actions:再次改变软件开发

本文转自 FEPulse 公众号(微信搜索 FEPulse,精选国内外最新前端资讯,为你把握前端脉搏)。 Github Actions 是 GitHub Universe 大会上发布的,被 Github 主管 Sam Lambert 称为“再次改变软件开发”的一款重磅功能&…

为别人软件加入广告或者密码(特别思路)

洪雨的的这款软件比较奇特,是忽然想到一个思路,然后实现了一下。 exe文件都有一个很有趣的地方,只要内部完整,就可以运行。比如一个exe文件,我们运行的时候,电脑知道他是exe所以可以直接运行。假如洪雨将它…

c free语言自定义函数,C 语言free函数的工作原理

今天在网上看到了这样一个问题,“如果malloc 了一块字符串的内存,然后,它改变了这个字符串的大小,问会不会有一部分内存没有被释放掉。”这个问题,以前的确没有仔细想过。当然,我觉得是肯定会释放掉的&…

Django 错误跳转页面

原网站:https://blog.csdn.net/goupper1991/article/details/50736826 django404,500错误自定义页面: 将 改为 1.修改settings文件DEBUG FalseALLOWED_HOSTS [127.0.0.1, localhost]或者ALLOWED_HOSTS [*]2.配置urls文件from django.conf.…

ElasticSearch-Hadoop:从Hadoop到ElasticSearch的产品视图计数索引和客户顶部搜索查询...

这篇文章涵盖了如何使用ElasticSearch-Hadoop从Hadoop系统读取数据并在ElasticSearch中对其进行索引。 它涵盖的功能是在最近n天中为每个客户的产品浏览量计数和热门搜索查询编制索引。 分析的数据可以进一步在网站上使用,以显示最近浏览过的客户,产品浏…

伸缩轨道_深度解析——伸缩喷漆房为什么这么受欢迎!

伸缩式喷漆房是一种环保喷漆设备,它可以在使用时,自动展开形成封闭或半封闭的环保喷漆房,不使用时收缩合拢到一处的特殊环保喷漆房设备,由于伸缩式喷漆房外观大方、简单实用且投资费用低,它在现代涂装应用中越发广泛。…

snippet,让你编码效率翻倍

为什么谈到Snippet 今天下午在用vscode做小程序的时候,发现很不方便,因为商店里提供的代码片段极为有限,而且平时几乎每天都需要用到代码片段,所以就在思考他们是怎么做到给别人提供代码的,我可以自定义代码片段吗。然…

键盘keydown值表

键盘名称键值(keycode)键盘名称键值(keycode)BackSpace8Tab9Clear12Enter13Shift_L16Control_L17Alt_L18Pause19Caps_Lock20Escape27Space32Prior33Next34End35Home36Left37Up38Right39Down40Select41Print42Execute43Insert45Del…

c语言算ex自定义函数,用C语言写定积分的通用函数:sin(x),cos(x),eX.

/************************************************************//*sin,cos,exp函数已经存在于系统的数学函数库中,程序开头需要定义math头文件*//************************************************************/#include/****************主函数****************…

day12-HTML基础之DOM操作

DOM(Document Object Model 文档对象模型) 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象。可以通过dom对象中js提供的方法,找到html的各个标签。通过找到标签就可以…

小程序源码 租房管理系统_如何通过租房小程序开发快速引流

租房市场在整个房产市场占据了极大一部分市场份额,而随着租售同权政策的提出、房价的不断提升,租房市场份额将进一步扩大。合肥小程序开发智速新媒体公司传统的租房方式不管是出租方还是租房客户,彼此之间的消息不对等、沟通困难等因素导致房…

REST 101开发人员专用

本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别,使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 ,使我们不必考虑一组相似功能的特定变体。 尽管有这些间…

一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼

小程序之前写的,也就前段时间,毛毛糙糙的写了第一版... 因为使用OPPO手机,所以有个锁屏杂志的东西,里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的,图片菲菲菲菲菲常漂亮,看到网上很多人提取不…

SQLAlchemy 操作数据库

SQLAlchemy 操作数据库 SQLAlchemy为Python提供了不同数据库的统一接口,采用ORM的方式操作数据库,简洁优雅 一、安装 直接通过pip安装即可 pip install sqlalchemy 二、连接数据库 这里用小巧的sqlite来做测试 from sqlalchemy import create_engine# 创…

e会学上的c语言答案,e会学刷课脚本_e会学代刷

e会学刷课脚本_e会学代刷2020-06-17 04:10:15【刷课平台】【在线刷课】68在Excel 2010中,假定一个单元格的地址表示为$D25,则该单元格的行地址为( )。A、DB、25C、30D、45正确答案: B69在自定义序列对话框中输入新序列时,序列内容间用什么分隔。( )A、中文逗号B、回…

贝塞尔曲线理解与应用

贝塞尔曲线并非是由贝塞尔发明的,但是是因为他把这个东西应用到当时的汽车领域而闻名的,所以取名为贝塞尔曲线。 在我看来,用简单的话来理解一下贝塞尔曲线,他是通过少量几个点,使用一套公式,生成一条平滑曲…