前端解决方案工具集

2021-05-08  本文已影响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();

}

上一篇下一篇

猜你喜欢

热点阅读