美文网首页
前端解决方案工具集

前端解决方案工具集

作者: 卖手机的程序猿 | 来源:发表于2021-05-08 11:27 被阅读0次



    移动适配方案之 --postcss-px2rem + getRem多终端适配方案适配js


    1、安装  npm install postcss-pxtorem -D

     // 蓝湖上设计稿自定义为375px 测量值直接写入即可 若设计稿为750px 则rootValue: 32

    2、项目根目录postcss.config.js   

    module.exports = {

        plugins: {

          "postcss-pxtorem": {

            rootValue: 16, //结果为:设计稿元素尺寸/16,比如元素宽320px,最终页面会换算成 20rem

            propList: ["*"], //是一个存储哪些将被转换的属性列表,这里设置为['*']全部,假设需要仅对边框进行设置,可以写['*', '!border*']

            unitPrecision: 5, //保留rem小数点多少位

            //selectorBlackList: ['.radius'],  //则是一个对css选择器进行过滤的数组,比如你设置为['fs'],那例如fs-xl类名,里面有关px的样式将不被转换,这里也支持正则写法。

            replace: true, //这个真不知到干嘛用的。有知道的告诉我一下

            mediaQuery: false, //媒体查询( @media screen 之类的)中不生效

            minPixelValue: 12, //px小于12的不会被转换

          },

        },

      };

    3、新建一个rem.js的文件,在main.js中引用

    (function(){

        window.onload = () =>{

            getRem(375,100)

        }

        window.onresize = () =>{

            getRem(375,100)

        }

        /**

         * 

           代表设计稿的宽度,375/750/1920

         * @param {*} desginWide 

           代表换算比例一般写100,100的话比较好换算,

           比如,你测量的一个宽度是100px,就可以写为1rem,以及1px=0.01rem

         * @param {*} pxRem 

         */

        const getRem = (desginWide,pxRem) =>{

            // 获取设备的宽度

            let clineWidth = document.body.clientWidth || document.documentElement.clientWidth;

            //获取html根元素

            let htmlDom = document.getElementsByName("html")[0];

            htmlDom.style.fontSize = clineWidth / desginWide * pxRem + 'px'

        }

    })()



    发送验证码封装


    /**

     *

     * @param {*} e 要操作的dom

     * @param {*} callBack 处理发送验证码的逻辑

     * @param {*} num 几秒后可以重新获取

     * @param {*} delay 多少秒掉一次

     */

    export const sendCode = (e, callBack, num = 10, delay = 1000) => {

        var target = e.target || e.srcElement;

        let timer = null;

        target.disabled = true;

        target.innerHTML = `${num}秒后可重新获取`;

        callBack();

        timer = setInterval(() => {

            num--;

            if(num > 0) {

                target.innerHTML = `${num}秒后可重新获取`;

            }else{

                clearInterval(timer);

                target.disabled = false;

                target.innerHTML = `点击发送验证码`;

                num = num;

            }

        }, delay)

    }

    使用方式:

    import { sendCode } from './utils.js'

    <button @click="sendCodeBtn($event)">发送验证码</button>

    methods: {

        sendCodeBtn(e) {

          sendCode(e, () => {

            console.log('调用后台发送验证码的接口逻辑处理')

          }, 20)

        }

      }



    防抖节流,前端常见面试题


    解决场景:短信验证码倒计时、浏览器缩放、减少请求等

    1、函数防抖

    function debounce(callback,waite){

        let content = this;

        let args = [...arguments];

        let timeout;

        return function(){

            if(timeout) clearTimeout;

            timeout = setTimeout(() =>{

                callback.call(content,args);

            },waite)

        }

    }

    2、 函数节流,在一段时间内只执行一次函数,时间戳版本

    function throlte(callback,delay){

        let pre = Date.now();

        return function(){

            let args = arguments;

            let content = this;

            let now = Date.now();

            if((now - pre) >= delay){

                callback.applay(content,args);

            }

            pre = Date.now();

        }

    }


    前端常见面试题


    1、字符串反方向

    /**

     * 倒序遍历实现

     * @param {*} str 

     * @returns 

     */

    function reverseStr(str){

        let strs = "";

        for(let i = str.length -1;i >= 0;i--){

              strs += str[i];  

        }

        return strs

    }

    2、判断是否是回文

    /**

     * 判断是否是回文

     * @param {*} str 

     * @returns 

     */

    function isPalindrome2(str){

        return str === str.split().reverse().join();

    }

    相关文章

      网友评论

          本文标题:前端解决方案工具集

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