首页 » 前端 » 正文

常见js兼容问题

1、获取屏幕滚动高度

document.body.scrollTop:firefox可识别
document.documentElement.scrollTop:chrome可识别
浏览器不识别,得到的是0。但是两者在同一浏览器中只有一个生效,所以平时用的时候,可以

2、获取屏幕尺寸

这里提供两个个链接:
https://www.cnblogs.com/chris-oil/p/6662894.html,
https://segmentfault.com/a/1190000010746091
document.body.clientWidth:网页可见区域宽,不包括滚动条与工具条
document.documentElement.clientWidth:同上
document.body.offsetWidth:网页可见区域宽,包括边线的宽
document.body.scrollWidth:网页正文全文宽,内容区域加上内边距,在加上任何溢出内容的尺寸,如果没有溢出时,这些属性与clientWidth和clientHeight是相等的
window.screen.width:屏幕分辨率的宽
window.screen.availWidth:屏幕可用工作区宽度
window.innerWidth:可视区域的宽
window.outerWidth:加上工具条与滚动条窗口的宽度(如果浏览器开发者模式下,跟innerWidth就有区别了)

备注:

clientWidth
offsetWidth
scrollWidth
这个三个因为html和body的margin和padding的样式影响,可以看博客 js获取屏幕宽度 这篇文章
三个都受到meta标签中content里面的width的影响,比如屏幕375,width设置为600,以上都会变成600
如果页面因为某些没有折行的代码存在,scrollWidth会变成相应的宽度
outerWidth
在移动端显示为0,不知道是什么原因
innerWidth
在苹果手机上测试不同机型得到的不一样,慎用
outerWidth、screen.width、availWidth
如果在浏览器非移动开发模式下,三个都是你当前浏览器的宽度,PC端适配的时候要注意了
在做移动端开发的时候,一般我们获取宽度去适配,经常用到viewport的属性,其中“window.innerWidth”均表示浏览器可用宽度,一般情况下可用宽度就是手机屏幕宽度,但是在meta中设置“initial-scale=2”不等于1的情况下,他们俩的值变成了188px(375的一半),就是因为内容放大了,只能显示一半。
好了,到了总结的时候了
另外“document.body.scrollWidth”表示网页正文全文宽度,如果最外层设置了padding,尽管设置了“box-sizing: border-box”,页面也没有出现错乱,但是它的值也会变大,个人推荐使用“document.body.clientWidth”“window.screen.availWidth”注意以上提到的受影响的点就好了

3、null和undefined

null表示”没有对象”,即该处不应该有值。典型用法是:
用来初始化一个变量,这个变量可能被赋值为一个对象。
用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象。
当函数的参数期望是对象时,被用作参数传入。
当函数的返回值期望是对象时,被用作返回值传出。
作为对象原型链的终点。

undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:
变量被声明了,但没有赋值时,就等于undefined。
调用函数时,应该提供的参数没有提供,该参数等于undefined。
对象没有赋值的属性,该属性的值为undefined。
函数没有返回值时,默认返回undefined。

undefined可以通过typeof 变量==undefined 进行判断
unll可以通过 !变量 进行判断
但是变量为0的时候 两个结果是一样的,所以为了兼容可以这样:

持续更新…