REM.JS pc端与移动端的适配

(function(doc, win) {

// html元素字体
// 这里基础字体设置为10在uc, WX上没效果,  不知道为什么
// 设置为10时, dpr=1的手机, 宽度360, 计算出来html的字体大小为5px, 可能是字体太小了
// 尽量设置大一些, 这样避免12px字体大小的限制
var _rootFontSize = window._rootFontSize || 25;

// 默认不支持缩放
var _remMetaScalable = typeof window._remMetaScalable === 'undefined'
    ? false
    : !!window._remMetaScalable;

var docEl = doc.documentElement,
    isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),

    // 只针对IOS设备
    dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,

    // 计算缩放比
    scale = 1 / dpr,

    // 检测支持的"缩放"事件
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
docEl.dataset.dpr = dpr;

// 被iframe引用时,禁止缩放
dpr = window.top === window.self ? dpr : 1;

var metaEl = doc.createElement('meta');
metaEl.name = 'viewport';
var metaElContent = 'width=device-width, ';

// 支持缩放
if (_remMetaScalable) {
    metaElContent += 'initial-scale=' + scale;
} else {
    metaElContent += (
        'initial-scale=' + scale
        + ',maximum-scale=' + scale
        + ', minimum-scale=' + scale
        + ', user-scalable=no');
}
metaEl.content = metaElContent;
docEl.firstElementChild.appendChild(metaEl);

// 缩放/旋转设备检测函数
var recalc = function() {
    var width = docEl.clientWidth;

    // 750为设计用的宽度, 比如它以iphone6标准(宽750)
    // 此时, 按照设计稿的尺寸写就可以了
    // 如: 设计稿为100px, 那么就写4rem(100 / 25), 25是自己设置的
    // 也可以设置成100, 这样就写100px就写1rem
    docEl.style.fontSize = _rootFontSize * (width / 750) + 'px';
};
recalc();

if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);

})(document, window);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值