分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

flexible.js

发布时间:2023-09-06 01:53责任编辑:郭大石关键词:jsflex

;(function(win, lib) {
???var doc = win.document;
???var docEl = doc.documentElement;
???var metaEl = doc.querySelector(‘meta[name="viewport"]‘);
???var flexibleEl = doc.querySelector(‘meta[name="flexible"]‘);
???var dpr = 0;
???var scale = 0;
???var tid;
???var flexible = lib.flexible || (lib.flexible = {});
???
???if (metaEl) {
???????console.warn(‘将根据已有的meta标签来设置缩放比例‘);
???????var match = metaEl.getAttribute(‘content‘).match(/initial\-scale=([\d\.]+)/);
???????if (match) {
???????????scale = parseFloat(match[1]);
???????????dpr = parseInt(1 / scale);
???????}
???} else if (flexibleEl) {
???????var content = flexibleEl.getAttribute(‘content‘);
???????if (content) {
???????????var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
???????????var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
???????????if (initialDpr) {
???????????????dpr = parseFloat(initialDpr[1]);
???????????????scale = parseFloat((1 / dpr).toFixed(2)); ???
???????????}
???????????if (maximumDpr) {
???????????????dpr = parseFloat(maximumDpr[1]);
???????????????scale = parseFloat((1 / dpr).toFixed(2)); ???
???????????}
???????}
???}
???if (!dpr && !scale) {
???????var isAndroid = win.navigator.appVersion.match(/android/gi);
???????var isIPhone = win.navigator.appVersion.match(/iphone/gi);
???????var devicePixelRatio = win.devicePixelRatio;
???????if (isIPhone) {
???????????// iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
???????????if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { ???????????????
???????????????dpr = 3;
???????????} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
???????????????dpr = 2;
???????????} else {
???????????????dpr = 1;
???????????}
???????} else {
???????????// 其他设备下,仍旧使用1倍的方案
???????????dpr = 1;
???????}
???????scale = 1 / dpr;
???}
???docEl.setAttribute(‘data-dpr‘, dpr);
???if (!metaEl) {
???????metaEl = doc.createElement(‘meta‘);
???????metaEl.setAttribute(‘name‘, ‘viewport‘);
???????metaEl.setAttribute(‘content‘, ‘initial-scale=‘ + scale + ‘, maximum-scale=‘ + scale + ‘, minimum-scale=‘ + scale + ‘, user-scalable=no‘);
???????if (docEl.firstElementChild) {
???????????docEl.firstElementChild.appendChild(metaEl);
???????} else {
???????????var wrap = doc.createElement(‘div‘);
???????????wrap.appendChild(metaEl);
???????????doc.write(wrap.innerHTML);
???????}
???}
???function refreshRem(){
???????var width = docEl.getBoundingClientRect().width;
???????if (width / dpr > 540) {
???????????width = 540 * dpr;
???????}
???????var rem = width / 10;
???????docEl.style.fontSize = rem + ‘px‘;
???????flexible.rem = win.rem = rem;
???}
???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);
???if (doc.readyState === ‘complete‘) {
???????doc.body.style.fontSize = 12 * dpr + ‘px‘;
???} else {
???????doc.addEventListener(‘DOMContentLoaded‘, function(e) {
???????????doc.body.style.fontSize = 12 * dpr + ‘px‘;
???????}, false);
???}
???
???refreshRem();
???flexible.dpr = win.dpr = dpr;
???flexible.refreshRem = refreshRem;
???flexible.rem2px = function(d) {
???????var val = parseFloat(d) * this.rem;
???????if (typeof d === ‘string‘ && d.match(/rem$/)) {
???????????val += ‘px‘;
???????}
???????return val;
???}
???flexible.px2rem = function(d) {
???????var val = parseFloat(d) / this.rem;
???????if (typeof d === ‘string‘ && d.match(/px$/)) {
???????????val += ‘rem‘;
???????}
???????return val;
???}
})(window, window[‘lib‘] || (window[‘lib‘] = {}));

这段代码所做的主要事情就是把

1rem的大小定义为屏幕宽度的十分之一

flexible.js

原文地址:https://www.cnblogs.com/mingweiyard/p/9025213.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved