JS获取body的高度

JS获取body的高度,第1张

1、document.body.clientWidth//网页可见区域宽

2、document.body.clientHeight//网页可见区域高

3、document.body.offsetWidth//网页可见区域宽(包括边线的宽)

4、document.body.offsetHeight//网页可见区域高(包括边线的高)

5、document.body.scrollWidth//网页正文全文宽

6、window.screen.availHeight//屏幕可用工作区高度

7、window.screen.availWidth//屏幕可用工作区宽度

8、alert($(document.body).outerWidth(true))//浏览器时下窗口文档body的总宽度 包括border padding margin

9、alert($(document.body).width())//浏览器时下窗口文档body的高度

扩展资料:

1、alert($(window).height())//浏览器时下窗口可视区域高度

2、alert($(document).height())//浏览器时下窗口文档的高度

3、alert($(document.body).height())//浏览器时下窗口文档body的高度

4、alert($(document.body).outerHeight(true))//浏览器时下窗口文档body的总高度 包括border padding margin

5、alert($(window).width())//浏览器时下窗口可视区域宽度

6、alert($(document).width())//浏览器时下窗口文档对于象宽度

7、alert($(document).scrollTop())//获取滚动条到顶部的垂直高度

8、alert($(document).scrollLeft())//获取滚动条到左边的垂直宽度

javascript screen对象获取屏幕宽高如alert(screen.height)

availHeight 属性 -- 窗口可以使用的屏幕高度,单位像素

availWidth 属性 -- 窗口可以使用的屏幕宽度,单位像素

colorDepth 属性 -- 用户浏览器表示的颜色位数,通常为32位(每像素的位数)

pixelDepth 属性 -- 用户浏览器表示的颜色位数,通常为32位(每像素的位数)(IE不支持)

height 属性 -- 屏幕的高度,单位像素

width 属性 -- 屏幕的宽度,单位像素

div设置定位,宽度高度设为屏幕一般半即可,至于居中的话可以绝对定位。

当 webView 作为 UITableView 中的 tableViewHeader 的时候,因为自身本来就是一个滚动视图,所以为了避免与外部的 UITableView 滚动视图冲突,通常的做法都是保证 webView 的 contentSize 与自身的 bounds 的高度保持一直,以保证 webView 不会因为内容被隐藏造成自身的内滑动问题。

在保证自身 bounds 的高度与 contentsize 的高度始终一致的时候,通常的做法就是用 kvo 来监听 scrollView 的 contentsize 属性,然后实时更新当前的 frame 的高度。这样的做法是没问题的。但是如果 webView 页面中设置了页面的偏移 contentInset(偏移值为正值) 的话,则就因为 kvo 只更正当前的 content 的高度造成偏移的部分被更正削去的问题。

当 webView 页面加载完成之后,如果再进行重新 reload 的时候,如果 reload 的页面高度比之前的高度小,那么由于 body.scrollHeight 高度维持之前的页面高度。导致 webView 中获取的 contentSize 的高度始终为之前页面的高度,导致页面 reload 的时候出现大面积空白问题。

总结来说,两个问题:

问题一:在 contentSize 里面如果将内容的偏移量在kvo监听中添加的话,会造成页面的死循环,一直循环往复的加高度,原因是因为frame的高度永远大于 contentSize 的高度( frame.width = contentSize.width + inset.bottom ),此时会不断的进行叠加(只加不减)

问题二:页面加载完成之后,在进行重新 reload 的时候,如果 reload 的页面高度比之前的高度少,那么 body.scrollHeight 高度维持之前的页面高度。 contentSize 高度不变导致页面reload的时候出现大面积空白。

因为在kvo中进行页面的更正,所以inset的偏移量会造成frame高度始终大于contentSize,导致contentSize始终要保持跟frame一致,而 cotentSize 变化导致 contentView 的 height 被间接增加,kvo因此又更新界面 bounds ,最终导致循环的产生。

为了避免这个问题,可以通过注入JS的方法间接的去实现页面的偏移。如下:

因为webView的 ContentSize 受 html 中的 body.scrollHeight 影响。重点是在刷新页面的时候通过js重置页面的 body.scrollHeight 的高度,可以采取如下做法:

1.去除之前的页面监听(保证重置当前 webView 的高度以及内容高度的时候,不会因为 kvo 将修改的内容又改回去)

2.重置当前 webView 的高度以及内容高度

3.通过JS注入将 body 的内容剔除并设置高度为重置的高度

4.注入完成之后,加上kvo监听内容

在进行自适应页面高度刷新的时候,有时候也会在页面加载完成之后通过获取页面的 body.scrollHeight 来获取页面高度,但是这样在有些时候是不准的,因为有些页面的内容请求是 Ajax 异步请求,界面更新在数据加载之前,那会渲染之后的界面与当前更新的页面会有偏差,所以不建议通过这个方法进行页面的更新(尤其是加载一些三方的html页面,不可控),如果是自家的页面,可以与前端小哥商量,通过 JS交互 的方法将页面渲染后的高度通过交互给我们,进而刷新页面已获取准确的页面高度。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/7777326.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存