在uniapp中获取可视区域的高度(uni.getSystemInfo)

Posted 打工仔小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在uniapp中获取可视区域的高度(uni.getSystemInfo)相关的知识,希望对你有一定的参考价值。

前言

在实际开发中我们会遇到不确定高度的情况,那么在uniapp中我们如何获取区域的高度呐?一起来看看吧

使用到的:

uni-app提供了异步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2个API获取系统信息

uni.getSystemInfo(OBJECT)

异步获取系统信息

OBJECT 参数说明:

参数名

类型

必填

说明

success

Function

接口调用成功的回调

fail

Function

接口调用失败的回调函数

complete

Function

接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明,目前需要使用到的:

参数

说明

windowHeight

可使用窗口高度

statusBarHeight

手机状态栏的高度

一、分析uniapp的可视区域

是哪块哪?其实和我们想的有些出入

其实就是蓝色区域=红色区域-绿色区域

代码:

 getClineHeight()
     const res = uni.getSystemInfo(
           success:(res=>
                  this.clientHeight = res.windowHeight-uni.upx2px(80)
            )
        );
     ,

tip:注意,在我们的微信小程序中是可以正确显示的,但是在ios中是有问题的

二、如何在小程序和ios中都能正确显示

我们只需要获取系统信息中的platform信息,判断是ios或者android或者其他

tip注意点:

  1. 注意这里的单位是pxname我们需要将代码中导航栏写的css的80rpx转换为40px,使用upx2px直接可以进行转换

2.ios本身有44的高度,Android是48

代码:

        getBarHeight()
                const res = uni.getSystemInfoSync()
                if(res.platform==='ios')
                    return 44+res.statusBarHeight
                else if(res.platform==='android')
                    return 48+res.statusBarHeight
                else
                    return 0;
                
            ,
            //获取可视区域高度
            getClineHeight()
                const res = uni.getSystemInfo(
                    success:(res=>
                        this.clientHeight = res.windowHeight-uni.upx2px(80)-this.getBarHeight();
                    )
                );
            ,

三、减掉的部分

白色部分=绿色部分(windowHeight)-蓝色部分(ios44,Android48)-橙色部分(getSystemInfoSync中的statusBarHeight)-黑色部分(你设置的高度或者使用组件的高度,注意单位是px)

windowHeight

可使用窗口高度

statusBarHeight

手机状态栏的高度

减去

代码:

        getBarHeight()
                const res = uni.getSystemInfoSync()
                if(res.platform==='ios')
                    return 44+res.statusBarHeight
                else if(res.platform==='android')
                    return 48+res.statusBarHeight
                else
                    return 0;
                
            ,
            //获取可视区域高度
            getClineHeight()
                const res = uni.getSystemInfo(
                    success:(res=>
                        this.clientHeight = res.windowHeight-uni.upx2px(80)-this.getBarHeight();
                    )
                );
            ,

JS获取浏览器可视区域的尺寸

一、

所谓可视区域是指能看得见的区域,即在浏览器中能看到页面的区域(高度与宽度)。刚刚使用 document.body.clientHeight 来获取可视区域的高度得到的却是整个文档的高度,然后在cnblogs.com的一篇文章中获知需要通过 document.documentElement.clientHeight 才能获取到浏览器的可视区域的高度,顺便将该文章摘下来,如下:

在没有声明DOCTYPE的IE中,浏览器显示窗口大小只能以下获取:

document.body.offsetWidth、document.body.clientWidth
document.body.offsetHeight、document.body.clientHeight
注意:如果body设置啦样式会受到影响
body{margin:0; padding:0; font:12px/1.5 arial; height:2001px; width:2000px;}

//chrome测试,窗口手动改变大小,随随之改变的有:
//声明了DOCTYPE
document.documentElement.clientHeight

document.documentElement.offsetWidth
document.documentElement.clientWidth

//没有声明了DOCTYPE
document.body.clientHeight
document.body.clientWidth
document.documentElement.clientWidth
document.documentElement.offsetWidth

 

        在声明了DOCTYPE的浏览器中,可以用以下来获取浏览器显示窗口大小:

document.documentElement.clientWidth
document.documentElement.clientHeight

        IE,FF,Safari皆支持该方法,opera虽支持该属性,但是返回的是页面尺寸;

        同时,除了IE以外的所有浏览器都将此信息保存在window对象中,可以用以下获取:

window.innerWidth
window.innerHeight

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域高: document.body.offsetWidth; //包括边线的宽
网页可见区域高: document.body.offsetHeight; //包括边线的宽
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度: window.screen.availWidth;

clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条。
clientY 设置或获取鼠标指针位置相对于窗口客户区域的 y 坐标,其中客户区域不包括窗口自身的控件和滚动条。
offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。
offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标。
screenX 设置或获取获取鼠标指针位置相对于用户屏幕的 x 坐标。
screenY 设置或获取鼠标指针位置相对于用户屏幕的 y 坐标。
x 设置或获取鼠标指针位置相对于父文档的 x 像素坐标。
y 设置或获取鼠标指针位置相对于父文档的 y 像素坐标。
 
二、用js实现分享到随页面滚动而滑动效果

页面向上向下滚动,分享到的模块随着滑动。

要点:

var scrtop =document.documentElement.scrollTop||document.body.scrollTop;
var height = document.documentElement.clientHeight||document.body.clientHeight;
var top = scrtop + (height - share.offsetHeight)/2;
top = parseInt(top);

获得页面垂直居中的位置

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body{margin:0; padding:0; font:12px/1.5 arial; height:2001px;width:2000px;}
#share{width:100px; height:200px; line-height:200px; text-align:center; border:1p solid #ccc; background:#f5f5f5; position:absolute; left:-100px; top:0;}
#share_tit{position:absolute; right:-20px; top:60px; width:20px; height:60px; padding:10px 0; background:#06c; text-align:center; line-height:18px; color:#fff;}
</style>
<script>
/*jingangel http://www.cnblogs.com/jingangel/ */
window.onload = function(){
  var share = document.getElementById("share");
    share.onmouseover = function(){
      startrun(share,0,"left")
    }
    share.onmouseout = function(){
      startrun(share,-100,"left")
    }
        window.onscroll = window.onresize = function(){
            var scrtop =document.documentElement.scrollTop||document.body.scrollTop;
            var height = document.documentElement.clientHeight||document.body.clientHeight;
            var top = scrtop + (height - share.offsetHeight)/2;
            top = parseInt(top);
            startrun(share,top,"top")
        }
}

var timer = null
function startrun(obj,target,direction){
    clearInterval(timer);
    timer = setInterval(function(){
      var speed = 0;
        
                if(direction == "left"){
                    speed = (target-obj.offsetLeft)/8;
                    speed = speed>0?Math.ceil(speed):Math.floor(speed);
                    
                    if(obj.offsetLeft == target){
                        clearInterval(timer);
                    }else{
                        obj.style.left = obj.offsetLeft + speed + "px";
                    }
                }
                
                 if(direction == "top"){
                    speed = (target-obj.offsetTop)/8;
                    speed = speed>0?Math.ceil(speed):Math.floor(speed);
                    
                    if(obj.offsetTop == target){
                        clearInterval(timer);
                    }else{
                        obj.style.top = obj.offsetTop + speed + "px";
                    }
                    document.title = obj.offsetTop + \',\' + target + \',\' +speed;
                }
        
    },30)
}
</script>
</head>

<body>

<div id="share">
  分享到内容
  <span id="share_tit">分享到</span>
</div>

</body>
</html>

 

 

以上是关于在uniapp中获取可视区域的高度(uni.getSystemInfo)的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中获取文档的高度可视区域高度以及滚动条距页面顶部的高度

JS获取浏览器可视区域的尺寸

JS获取浏览器可视区域的尺寸

如何获取页面可视区域的高度

js获取可视区域高度

获取屏幕宽高度与可视区域宽高度(availWidthclientWidthwidthinnerWidth)