美文网首页
获取浏览器viewport分辨率

获取浏览器viewport分辨率

作者: codemarker | 来源:发表于2015-06-05 17:36 被阅读1324次

    不知道其他人做H5页面用什么工具,我用的是著名的idangerous swiper

    不过该组件在适应移动端屏幕方面并没有什么好的方法(或许有,我没用过),只能给.swiper-container指定固定的宽度和高度。如下所示:
    <code>
    .swiper-container {
    /* Specify Swiper's Size: */
    width:320px;
    height: 540px;
    }</code>
    这样,如果某个手机浏览器屏幕不符合这个分辨率,就会显示不正常。

    那自然想到可以用JS来动态改变.swiper-container的宽高来适应不同分辨率的屏幕。首先想到的就是利用screen对象的width和height属性来实现这个想法。

    但是这两个属性获取到的值其实是整个显示器的分辨率,我们知道在手机上打开浏览器其实跟PC是一样的,它也有标签栏、状态栏什么的,除非你变态地每次都用全屏查看。
    于是pass掉screen.width和screen.height。

    然后我发现了screen.availWidth和screen.availHeight
    这是个好东西!

    根据MDN的解释:
    screen.availWidthscreen.availHeight是获取水平和垂直方向可用的屏幕像素数。

    但是这里面有个坑,screen.availHeight是不包含windows系统任务栏的高度的。也就是说:
    screen.availHeight = screen.Height - 任务栏高度

    xp系统会减去windows任务栏默认30px高度.所以如果是800的高度会变成770;
    win7的任务栏默认则是40px.所以是屏幕实际高度减去40;
    另外任务栏也可以在屏幕上下左右任何位置的.所以availWidth也会去掉任务栏的距离

    实际测试发现,在PC端使用这两个属性是没有问题,包括chrome的手机调试模式。
    但用手机打开同样的页面时,这个两个属性值会远远大于你能看到的手机屏幕的尺寸,
    那是因为现在的手机屏幕大多是高分辨率屏,同样的一块区域的实际像素数远比PC上要多。
    于是又桑心滴pass掉。

    搜啊搜,找到了window的另一个属性:window.innerHeight

    MDN的解释是:Height (in pixels) of the browser window viewport including, if rendered, the horizontal scrollbar.

    同样,window.innerWidth是获取浏览器viewport的宽度(可能包含滚动条)。
    这个貌似正式我想要的!

    经过测试发现,利用这两个属性正好能达到我要的效果:

    使用window.innerWidth和window.innerHeight来获取viewport的分辨率

    总结:
    通过预先获取window.innerWidth和window.innerHeight,可以轻易地搞定swiper的自适应效果。代码如下:
    <code><script>
    //获得可视区分辨率
    var swp_w = window.innerWidth,
    swp_h = window.innerHeight;
    //设定.swiper-container和.swiper-slide的尺寸
    $(".swiper-container,.swiper-slide").css({width:swp_w,height:swp_h});
    //初始化swiper
    var mySwiper = $('.swiper-container').swiper({
    //Your options here:
    speed: 400
    ,spaceBetween: 100
    ,mode:'vertical'
    });
    </script>
    </code>

    相关文章

      网友评论

          本文标题:获取浏览器viewport分辨率

          本文链接:https://www.haomeiwen.com/subject/suidqttx.html