H5自适应

  • 一、设置html的font-size,使用rem作为单位

假设设计稿宽度750px,屏幕宽高750px,

1、1rem=屏幕宽度/设计稿宽度*100px,适合用px表示宽度

1rem=100px

rem=实际/100,300px=3rem

2、1rem=屏幕宽度/10,适合用百分比表示宽度

1rem=75px

rem=实际/设计稿宽度*10=百分比值/10,250px=30%=3rem

 

JS

 1 (function(doc, win) {
 2     var pageWidth = 750;
 3     var docEl = doc.documentElement,
 4         isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
 5         dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
 6         dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
 7         dpr = 1,
 8         scale = 1 / dpr,
 9         resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
10     docEl.dataset.dpr = dpr;
11     var metaEl = doc.createElement('meta');
12     metaEl.name = 'viewport';
13     metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
14     docEl.firstElementChild.appendChild(metaEl);
15     var recalc = function() {
16         var width = docEl.clientWidth;
17         if (width / dpr > pageWidth) {
18             width = pageWidth * dpr;
19         }
20         // 乘以100,px : rem = 100 : 1
21         docEl.style.fontSize = 100 * (width / pageWidth) + 'px';
22     };
23     recalc()
24     if (!doc.addEventListener) return;
25     win.addEventListener(resizeEvt, recalc, false);
26 })(document, window);

 

  • 二、设置viewport的scale,缩放视口
 1 var view_timer = null;
 2 function viewPort(userAgent, pageWidth) {
 3     var oView = document.getElementById('viewport');
 4     if (oView) {
 5         document.head.removeChild(oView);
 6     }
 7     if (!pageWidth) {
 8         pageWidth = 750;
 9     }
10     var screen_w = parseInt(window.screen.width),
11         scale = screen_w / pageWidth;
12 
13     var creat_meta = document.createElement('meta');
14     creat_meta.name = 'viewport';
15     creat_meta.id = 'viewport';
16     if (/Android (\d+\.\d+)/.test(userAgent)) {
17         var version = parseFloat(RegExp.$1);
18         if (version > 2.3) {
19             creat_meta.content = 'width=' + pageWidth + ', initial-scale = ' + scale + ',user-scalable=1, minimum-scale = ' + scale + ', maximum-scale = ' + scale + ', target-densitydpi=device-dpi';
20         } else {
21             creat_meta.content = '"width=' + pageWidth + ', target-densitydpi=device-dpi';
22         }
23     } else {
24         if(window.orientation=='-90' || window.orientation == '90'){
25             scale = window.screen.height / pageWidth;
26             creat_meta.content = 'width=' + pageWidth + ', initial-scale = ' + scale + ' ,minimum-scale = ' + scale + ', maximum-scale = ' + scale + ', user-scalable=no, target-densitydpi=device-dpi';
27         }
28         else{
29             creat_meta.content = 'width=' + pageWidth + ', initial-scale = ' + scale + ' ,minimum-scale = ' + scale + ', maximum-scale = ' + scale + ', user-scalable=no, target-densitydpi=device-dpi';
30         }
31     }
32     document.head.appendChild(creat_meta);
33 }
34 viewPort(navigator.userAgent);
35 
36 window.onresize = function() {
37     clearTimeout(view_timer);
38     view_timer = setTimeout(function(){
39         viewPort(navigator.userAgent);
40     }, 500);
41 }

 

posted @ 2021-03-11 15:54  。活着。  阅读(409)  评论(0编辑  收藏  举报