PC+移动双端页面自适应屏幕缩放适配JS代码

很多前端重构工程师在进行网页还原的时候在自适应这一块会面临一些困扰,不能兼容其他屏幕的情况出现,今天分享一些代码希望可以帮助到大家。

这里以宽度为1920像素的设计稿为例,想要一比一还原设计稿达到适配效果需要使用到的JS代码。

// 屏幕自适应
var adaptViewport = (function () {
  function detectIE() {
    var ua = window.navigator.userAgent;
    var msie = ua.match(/MSIE (\d+)/g);
    if (msie != null) {
      return parseInt(msie[0].match(/\d+/g)[0]);
    }
    // IE 11
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {
      var rv = ua.indexOf('rv:');
      return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
    }
    return false;
  }
  var minWidth = 1400; // 最小宽度
  var designWidth = 1920; // 设计稿宽度
  var isFirefox = navigator.userAgent.indexOf("Firefox") != -1
  var ieVersion = detectIE();
  var zoom = 1;

  function resize() {
    // doc.clientWidth不包含滚动栏宽度
    var ww = document.documentElement.clientWidth || window.innerWidth;
    var realWid = Math.max(ww, minWidth);
    zoom = realWid / designWidth;
    if (ieVersion && ieVersion < 9) {
      return;
    }
    // firefox不支持zoom. ie9,10,11 zoom表现奇怪
    if (isFirefox || ieVersion >= 9) {
      if (zoom !== 1) {
        if (!$('.wrap').parent().hasClass('wrap-scale')) {
          $('.wrap').wrap('<div class="wrap-scale"></div>')
          $('.wrap-scale').css('position', 'relative');
          $('.wrap').data('originHeight', $('.wrap').outerHeight())
        }
        var transformOrigin = '0% 0%';
        $('.wrap').css({
          'width': designWidth,
          'transform': 'scale(' + zoom + ')',
          'transform-origin': transformOrigin,
          'margin-left': 0
        })
        $('.right-nav').css({
          'transform': 'scale(' + zoom + ')',
          'transform-origin': '100% 50%'
        });
        $('.acttop').css({
          'width': designWidth,
          'transform': 'scale(' + zoom + ')',
          'transform-origin': '100% 50%'
        });
        $('.wrap-scale').css({
          'width': (realWid > minWidth ? 'auto' : minWidth),
          'height': $('.wrap').data('originHeight') * zoom,
          'overflow': 'hidden'
        })
      }
    } else {
      $('.wrap').css({
        'width': designWidth,
        'zoom': zoom
      });
      $('.right-nav').css('zoom', zoom)
      $('.acttop').css({
        'width': designWidth,
        'zoom': zoom
      })
    }
  }
  resize();
  window.onresize = resize;
  // 当切换tab等情形导致.wrap高度改变时,调用此函数。
  function resizeWrapScale() {
    $('.wrap-scale').css({
      'height': $('.wrap').outerHeight() * zoom
    })
  }
  return {
    zoom: zoom,
    resizeWrapScale: resizeWrapScale
  }
})();

暂无介绍....

延伸阅读:

迅睿CMS表单调用-外部页面调用网站表单/全局表单提交项目

默认情况下表单提交页面是单独的一个页面,而在实际项目中有时候需要把表单提交页面放到首页、放到指定的栏目页、放到会员中心,...

会飞的鱼
2024 年 12 月 31 日
PC+移动双端页面自适应屏幕缩放适配JS代码

很多前端重构工程师在进行网页还原的时候在自适应这一块会面临一些困扰,不能兼容其他屏幕的情况出现,今天分享一些代码希望可以...

会飞的鱼
2024 年 8 月 18 日
Memcached与Redis的区别:WordPress网站加速优化篇

Memcached和Redis都是一种内存数据结构存储,它们可以作为数据库、缓存或消息队列使用。它们以高性能和高可用性的...

会飞的鱼
2024 年 8 月 18 日
WordPress主题开发教程手册 — 主题开发函数

Functions.php可以被经典主题、区块主题和子主题使用。functions.php文件是您向WordPress主...

会飞的鱼
2024 年 5 月 16 日
WordPress建站云服务器怎么选择?

如果您想搭建一个wordpress博客、商城、品牌官网或者web网站,选择一个稳定的云服务器是非常有必要的。那么如何选择...

会飞的鱼
2024 年 5 月 22 日