美文网首页
前端js兼容显示器缩放问题

前端js兼容显示器缩放问题

作者: Frank_Fang | 来源:发表于2022-10-25 17:14 被阅读0次

暂时还没找到兼容mac自带显示器和外接显示器的自适应缩放的解决方案。

  1. 在vue项目<utils>目录里加一个<devicePixelRatio.js>文件
/**
 * @description 校正windows页面在系统进行缩放后导致页面被放大的问题,通常放大比例是125%、150%
 * **/

class DevicePixelRatio {
  // 获取系统类型
  _getSystem () {
    // const flag = false
    var agent = navigator.userAgent.toLowerCase()
    if (agent.indexOf('windows') >= 0) {
    return true
    } else {
      return false
    }
  }

  // 获取页面缩放比例
  _addHandler (element, type, handler) {
    if (element.addEventListener) {
      element.addEventListener(type, handler, false)
    } else if (element.attachEvent) {
      element.attachEvent('on' + type, handler)
    } else {
      element['on' + type] = handler
    }
  }

  // 校正浏览器缩放比例
  _correct () {
    // 页面devicePixelRatio(设备像素比例)变化后,计算页面body标签zoom修改其大小,来抵消devicePixelRatio带来的变化。
    if (document.getElementsByTagName('body') && document.getElementsByTagName('body').length) {
      // 将当前视图缩放百分比作为变量存入body中
      document.getElementsByTagName('body')[0].style.zoom = 1 / window.devicePixelRatio
      document.getElementsByTagName('body')[0].style.setProperty('--c100vh', window.devicePixelRatio * 100 + 'vh')
    }
  }

  // 监听页面缩放
  _watch () {
    const t = this
    t._addHandler(window, 'resize', function () { // 注意这个方法是解决全局有两个window.resize
      // 重新校正
      t._correct()
    })
  }

  // 初始化页面比例
  init () {
    const t = this
    if (t._getSystem()) { // 判断设备,目前只在windows系统下校正浏览器缩放比例
      // 初始化页面校正浏览器缩放比例
      t._correct()
      // 开启监听页面缩放
      t._watch()
    }
  }
}
export default DevicePixelRatio
  1. 在<App.vue>里引入
import DevicePixelRatio from '@/utils/devicePixelRatio.js'

3.缩放后,100vh这种样式会有问题,在<App.vue>里加上修复代码:

  updated () {
    // 兼容屏幕缩放
    this.$nextTick(() => {
      new DevicePixelRatio().init()
    })
  }

4.页面中使用100vh时,略作调整

.main {
  height: calc(var(--c100vh) - 30px);
}

相关文章

  • 前端js兼容显示器缩放问题

    暂时还没找到兼容mac自带显示器和外接显示器的自适应缩放的解决方案。 在vue项目 目录里加一个

  • Ajax Axios

    关于Ajax兼容性问题 前端原生Ajax(get方式),后端使用node.js 前后端代码: 前端原生Ajax(p...

  • 前端开发-浏览器兼容的坑

    前端开发-浏览器兼容的坑 最近开始整理前端开发的浏览器兼容问题,初次发版内容少一点,后续会持续更新内容~ 一、JS...

  • 兼容性问题

    CSS兼容性问题PC页面布局兼容JS兼容问题移动页面兼容问题 CSS兼容问题.header {_width:100...

  • 59.3-CSS

    每一秒钟都有机会改变你的生活! 总结:前端的兼容性:JS、CSS、html的兼容性都是很头疼的问题;节点、标签、样...

  • 工作中兼容的处理

    标签(空格分隔): css的兼容 js的兼容 序 网页由前端三板斧组成,所以兼容也要从3个角度考虑,面试很反感...

  • HTML入门必备

    查看作者原文 一、前端开发做什么 传统前端:html+css+js HTML5大前端:各种端的兼容开发、Ajax+...

  • javascript 和 golang 前后端使用 AES 加密

    golang 前端javascript的代码 参考文章 golang、JS AES(CBC模式)加密解密兼容[ht...

  • 【前端】Vue.js 基础篇(上)

    前言 前端开发发展历程,目的都是为了提高开发效率: 原生JS Jquery之类的类库(解决不同浏览器兼容性问题) ...

  • 一个js绘图库的优化技巧

    最近在项目中使用Cytoscape.js、D3.js和DataV等前端绘图库。 图形常见的操作有拖拽、缩放、平移等...

网友评论

      本文标题:前端js兼容显示器缩放问题

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