s94-web
Version:
常用的web工具方法封装---牧人与鱼
59 lines (57 loc) • 2.86 kB
JavaScript
var s94_rem = (function (global){
let document = global?.document;
if (!document) return console.error('缺少 document 对象!');
let s94_rem = {
valueOf(){
let fontSize = global.getComputedStyle(document.documentElement)['font-size'];
return parseFloat(fontSize);
},
/**设置 viewport 比例
* @param {Number} scale 设定的值,如果设定的值不合理(小于等于0),PC默认为1,移动端会参考 devicePixelRatio
* @returns {s94_rem}
*/
setScale(scale){
let is_pc = !/Android|iPhone|iPad/i.test(global.navigator.userAgent);
scale = parseFloat(scale);
scale = scale > 0 ? scale : (is_pc ? 1 : 1/global.devicePixelRatio);
let metas = document.querySelectorAll('meta[name="viewport"]');
let viewport = metas.length ? metas[metas.length-1] : document.createElement('meta');
if(viewport.name != 'viewport'){
viewport.name = 'viewport';
viewport.content = 'width=device-width,user-scalable=no';
document.querySelector('head').appendChild(viewport);
}
let content = `,initial-scale=${scale},minimum-scale=${scale},maximum-scale=${scale}`;
viewport.content = viewport.content.replace(/,\s*(initial|minimum|maximum)-scale=[^,]+/g,'') + content;
return this;
},
/**计算rem的值,
* @param {Number} device_size 设备尺寸基数,如果设备尺寸大于此基数,默认取此基数,默认为640
* @param {Number} em rem基数,计算的rem值是【rem基数】基于【设备实际尺寸】和【设备尺寸基数】的比例变化的结果
* @returns {number}
*/
get(device_size, em){
var scale = this.scale;
device_size = (device_size || 640) / scale;
em = (em || 100) / scale;
var minWH = Math.min(document.documentElement.clientWidth, document.documentElement.clientHeight, device_size);
return em * (minWH / device_size);
},
display(device_size, em){
var v = this.get(device_size, em);
document.documentElement.style.fontSize = v+'px';
return this;
}
}
Object.defineProperty(s94_rem, 'scale', {
get(){
let is_pc = !/Android|iPhone|iPad/i.test(global.navigator.userAgent);
return is_pc ? 1 : global.outerWidth / global.innerWidth;
}
})
return s94_rem;
})(typeof globalThis !== 'undefined' ? globalThis :
typeof self !== "undefined" ? self :
typeof window !== "undefined" ? window :
typeof global !== "undefined" ? global : {});
export default s94_rem;