js实现整体缩放页面适配移动端
大家在适配页面的Web端和移动端时候,如果不需要那么麻烦,就可以使用js进行整体缩放,只需要引入一个js,改动htmll头部代码即可
切记:
1.该JS应在head中尽可能早的引入,减少重绘。
2.定宽(视窗缩放):对应meta标签写法–
750是效果图内容区域的宽度,一般为640或750
html头部代码:
整体缩放
js源码:
/** *该JS中,包含常用的UA判断、页面适配、search参数转键值对。 *该JS应在head中尽可能早的引入,减少重绘。 * *fixScreen方法根据两种情况适配,该方法自动执行。 *1.定宽(视窗缩放):对应meta标签写法--750是效果图内容区域的宽度,一般为640或750 *该方法会提取width值,主动添加scale相关属性值。 *注意:如果meta标签中指定了initial-scale,该方法将不做处理(即不执行)。 * *2.REM:不用写meta标签,该方法根据dpr自动生成,并在html标签中加上data-dpr和font-size两个属性值。 *该方法约束:IOS系统最大dpr=3,其它系统dpr=1,页面每dpr最大宽度(即页面宽度/dpr)=750,REM换算比值为16。 *对应css开发,任何弹性尺寸均使用rem单位,rem默认宽度为视觉稿宽度/16; *scss中$ppr(pixelperrem)变量写法--$ppr:750px/16/1rem; *元素尺寸写法--html{font-size:$ppr*1rem;}body{width:750px/$ppr;}。 */ window.mobileUtil=(function(win,doc){ varUA=navigator.userAgent, isAndroid=/android|adr/gi.test(UA), isIos=/iphone|ipod|ipad/gi.test(UA)&&!isAndroid,//据说某些国产机的UA会同时包含androidiphone字符 isMobile=isAndroid||isIos;//粗略的判断 return{ isAndroid:isAndroid, isIos:isIos, isMobile:isMobile, isNewsApp:/NewsApp\/[\d\.]+/gi.test(UA), isWeixin:/MicroMessenger/gi.test(UA), isQQ:/QQ\/\d/gi.test(UA), isYixin:/YiXin/gi.test(UA), isWeibo:/Weibo/gi.test(UA), isTXWeibo:/T(?:X|encent)MicroBlog/gi.test(UA), tapEvent:isMobile?'tap':'click', /** *缩放页面 */ fixScreen:function(){ varmetaEl=doc.querySelector('meta[name="viewport"]'), metaCtt=metaEl?metaEl.content:'', matchScale=metaCtt.match(/initial\-scale=([\d\.]+)/), matchWidth=metaCtt.match(/width=([^,\s]+)/); if(!metaEl){//REM vardocEl=doc.documentElement, maxwidth=docEl.dataset.mw||750,//每dpr最大页面宽度 dpr=isIos?Math.min(win.devicePixelRatio,3):1, scale=1/dpr, tid; docEl.removeAttribute('data-mw'); docEl.dataset.dpr=dpr; metaEl=doc.createElement('meta'); metaEl.name='viewport'; metaEl.content=fillScale(scale); docEl.firstElementChild.appendChild(metaEl); varrefreshRem=function(){ varwidth=docEl.getBoundingClientRect().width; if(width/dpr>maxwidth){ width=maxwidth*dpr; } varrem=width/16; docEl.style.fontSize=rem+'px'; }; win.addEventListener('resize',function(){ clearTimeout(tid); tid=setTimeout(refreshRem,300); },false); win.addEventListener('pageshow',function(e){ if(e.persisted){ clearTimeout(tid); tid=setTimeout(refreshRem,300); } },false); refreshRem(); }elseif(isMobile&&!matchScale&&(matchWidth&&matchWidth[1]!='device-width')){//定宽 varwidth=parseInt(matchWidth[1]), iw=win.innerWidth||width, ow=win.outerWidth||iw, sw=win.screen.width||iw, saw=win.screen.availWidth||iw, ih=win.innerHeight||width, oh=win.outerHeight||ih, ish=win.screen.height||ih, sah=win.screen.availHeight||ih, w=Math.min(iw,ow,sw,saw,ih,oh,ish,sah), scale=w/width; if(scale<1){ metaEl.content=metaCtt+','+fillScale(scale); } } functionfillScale(scale){ return'initial-scale='+scale+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no'; } }, /** *转href参数成键值对 *@paramhref{string}指定的href,默认为当前页href *@returns{object}键值对 */ getSearch:function(href){ href=href||win.location.search; vardata={},reg=newRegExp("([^?=&]+)(=([^&]*))?","g"); href&&href.replace(reg,function($0,$1,$2,$3){ data[$1]=$3; }); returndata; } }; })(window,document); //默认直接适配页面 mobileUtil.fixScreen();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。