wctdreamlandwebsite-front/static/js/flexible.js

89 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

(function flexible(window, document) {
const docEl = document.documentElement;
// const dpr = window.devicePixelRatio || 1;
const dpr = 1;
// adjust body font size
function setBodyFontSize() {
if (document.body) {
document.body.style.fontSize = 12 * dpr + "px";
} else {
document.addEventListener("DOMContentLoaded", setBodyFontSize);
}
}
setBodyFontSize();
const browser = {
versions: (function () {
const u = navigator.userAgent;
// const app = navigator.appVersion;
return {
trident: u.includes("Trident") > -1,
presto: u.includes("Presto") > -1,
webkit: u.includes("AppleWebkit") > -1,
gecko: u.includes("Gecko") > -1,
mobile: !!u.match(/AppleWebKit.*Mobile.*/),
ios: !!u.match(/\(i[^;]+;(U;)? CPU.+Mac OS X/),
android: u.includes("Android") > -1,
iPhone: u.includes("iPhone") > -1,
iPad: u.includes("iPad") > -1,
};
})(),
};
function refreshRem() {
let width = docEl.getBoundingClientRect().width;
if (!browser.versions.mobile) {
if (width > 1920) {
width = 1920;
} else if (width < 1200) {
width = 1200;
}
}
if (width / dpr > 540) {
width = width * dpr;
}
let rem;
// console.log(browser.versions.mobile);
if (browser.versions.mobile) {
rem = width / 7.5;
} else {
// >1600
rem = width / 19.2;
}
docEl.style.fontSize = rem + "px";
flexible.rem = window.rem = rem;
}
refreshRem();
// 由于我们设计稿pc宽度为1920移动端宽度为750所以在使得100px=1rem的基准下分别使得当前width/19.2和width/7.5。
// // set 1rem = viewWidth / 10
// function setRemUnit() {
// const rem = docEl.clientWidth / 10;
// docEl.style.fontSize = rem + "px";
// }
// setRemUnit();
// reset rem unit on page resize
window.addEventListener("resize", refreshRem);
window.addEventListener("pageshow", function (e) {
if (e.persisted) {
refreshRem();
}
});
// detect 0.5px supports
if (dpr >= 2) {
const fakeBody = document.createElement("body");
const testElement = document.createElement("div");
testElement.style.border = ".5px solid transparent";
fakeBody.appendChild(testElement);
docEl.appendChild(fakeBody);
if (testElement.offsetHeight === 1) {
docEl.classList.add("hairlines");
}
docEl.removeChild(fakeBody);
}
})(window, document);