编程大白话之-flexible.js工作原理

大家在平时工作中对于处理移动端各种设备兼容问题,都已经有了自己的解决办法,而网络上各类的插件也非常的多。其中有一款flexible.js(移动端自适应布局)。

相信大家对这个都不陌生,下载插件后,直接在html中引入js及css文件后,在scss中进行设置后便可以轻松的进行使用,但是 如果我们没有插件的时候,需要自己去手动进行设置,该怎么写呢?下面我们一起来看一下:

使用这个插件的目的就是为了将px单位转换为rem,也就是将一个固定的单位值变为一个可以适应各种屏幕大小的单位。
rem是根据根元素HTML的值变化的,所以只要我们确定了HTML的字号大小,那么rem便可以跟随其改变。

 resizeFz();
        function resizeFz() {
            document.documentElement.style.fontSize = (document.documentElement.clientWidth || document.body.clientWidth) / 10 + 'px';
        }
document.body.style.fontSize = '16px';

代码中我们可以看到设置的HTML的字体是将视口的宽度除以10后,以每一份为基准值,(body字体设置为了16px,如果不设置,字体大小会根据屏幕的大小而变化,)然后我们到scss中设置rem,我们以750px设计稿为例

@function px2rem($px, $rem: 75) {
    @return $px / $rem * 1rem;
}

通过这个简单的方法,在不考虑其他问题的情况下,就已经可以进行使用 px2rem()中传的值,为设计稿量到的值,直接填写就可以。

.content {
    width: px2rem(200);
    height: px2rem(100);
    background-color: #f33f40;
}
Han.PNG

如果我们就这样进行使用,肯定是会有很多问题存在的,我们也需要考虑到抖屏、内存、兼容等一系列问题。

resizeRootFz();
    function resizeRootFz() {
        // 设置html的font-size = 视口宽度 / 10
        document.documentElement.style.fontSize = (document.documentElement.clientWidth || document.body.clientWidth) / 10 + 'px';
    }
    var timer = null;
        // 监听视口宽度
    window.addEventListener('resize', function() {
        // 优化方案:
        // 1.函数防抖,(主要用于onscroll、onresize高频率触发事件),屏幕一直动会一直触发函数,会导致性能降低,所以采用性能优化节流
        if(timer) {     // 如果有定时器,将其清除
            clearTimeout(timer);
            timer = null;
        }
        // 开启新的定时器
        timer = setTimeout(function () {
            resizeRootFz();     
            clearTimeout(timer);
            timer = null;
        }, 3000)



        // 2.函数节流: 在一定时间内,只会执行一次,(在一定时间内执行第一次)
        window.onresize = function() {
            if(timer) return;
            timer = setTimeout(function() {
                resizeRootFz();
                clearTimeout(timer);
                timer = null;
            }, 300)
        }
    })

虽然很多地方写的不够全面以及严谨,通过自己简单的设置不需要引入js文件,就可以使用屏幕自适应。

有写不对的地方请大家提出来,后续也会将此文章进行更新、修正,请持续关注!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,814评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,749评论 1 45
  • 什么是Rem rem和em很容易混淆,其实两个都是css的单位,并且也都是相对单位,现有的em,css3才引入的r...
    tobAlier阅读 27,981评论 2 38
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,243评论 0 21
  • 作者:HelKyle链接:http://www.w3cplus.com/css/when-to-use-em-vs...
    红叶丶秋鸣阅读 3,309评论 0 3