为了能够达到根据不同设备之间自适应,我们先要识别用户设备的分辨率然后再给html设置大小,然后在写css过程中只要使用rem就可以能够做到自适应。

下面贴上代码:

fontSize() {
    let size;
    let winW = document.documentElement.clientWidth;
    if (winW > 375) {
      size = Math.round(winW / 3.9);
    } else if (winW >= 320 && winW < 375) {
      size = Math.round(winW / 3.6);
      if (size < 90) {
        size = 90;
      }
    } else {
      size = 100;
    }
    if (size > 100 && winW < 450) {
      size = 100;
    } else if (size > 150) {
      size = 150;
    }
    document.documentElement.style.fontSize = size + 'px';
  },

上面代码在后续用户使用过程中有用户反馈,调整手机设置页面大小后字体太大导致页面变形。

在查找资料后找到一篇大佬写的文章,通过获取用户缩放大小结合上面代码解决这个问题,这里附上大佬的原文链接:https://blog.csdn.net/qq_45915537/article/details/107378917

createScaleElement() {   // 创建1rem宽度的不可见元素
    let scaleDom = document.createElement('div')

    scaleDom.style.cssText = 'width:1rem;height:0;overflow:hidden;position:absolute;z-index:-2;visibility:hidden;'
    document.body.appendChild(scaleDom)
    return scaleDom
  },

  getOriginalHtmlFontSize() {
    let rootDom = document.querySelector('html')
    let fontSize = rootDom.style.fontSize || 16

    console.log(fontSize)

    return fontSize
  },

  toNum(fontSize) {
    if(typeof fontSize === 'string') {

      fontSize = fontSize.replace('px', '')
      return Number(fontSize)
    }
    return fontSize
  },


  toScale() {
    let scaleDom = this.createScaleElement()
    let htmlFontSize = this.getOriginalHtmlFontSize()
    let instanceWidth = scaleDom.offsetWidth
    let scale = 1

    if(window.getComputedStyle) {
      instanceWidth = window.getComputedStyle(scaleDom).width
    }

    htmlFontSize = this.toNum(htmlFontSize)
    instanceWidth = this.toNum(instanceWidth)

    if(
      (typeof htmlFontSize == 'number' && htmlFontSize != 0) &&
      (typeof instanceWidth == 'number' && instanceWidth != 0)
    ) {

      if(Math.abs(htmlFontSize-instanceWidth)<0.1) {   // 忽略细微的变化
        return 1
      }

      scale = htmlFontSize/instanceWidth    //计算缩放比例
    }

    return scale
  },


最终代码:

fontSize() {
    let size;
    let winW = document.documentElement.clientWidth;
    if (winW > 375) {
      size = Math.round(winW / 3.9);
    } else if (winW >= 320 && winW < 375) {
      size = Math.round(winW / 3.6);
      if (size < 90) {
        size = 90;
      }
    } else {
      size = 100;
    }
    if (size > 100 && winW < 450) {
      size = 100;
    } else if (size > 150) {
      size = 150;
    }
    document.documentElement.style.fontSize = size + 'px';
    let scale = toScale();
    document.documentElement.style.fontSize = (scale * size) + 'px';
},

这样就计算出了用户的缩放比例,我们再用缩放比例scale*fontSize就可以还原字体大小了

 

posted on 2021-03-02 12:00  去你的未来  阅读(356)  评论(0编辑  收藏  举报