v = parseInt(1 / initial_scale);
}
} else if(flexible) {
var o = flexible.getAttribute(“content”).match(/initial-dpr=(["']?)([\d.]+)\1?/);
if (o) {
v = parseFloat(o[2]);
initial_scale = parseFloat((1 / v).toFixed(2))
}
}
if (!v && !initial_scale) {
var n = (win.navigator.appVersion.match(/android/gi), win.navigator.appVersion.match(/iphone/gi));
v = win.devicePixelRatio;
v = n ? v >= 3 ? 3 : v >= 2 ? 2 : 1 : 1, initial_scale = 1 / v
}
//没有viewport标签的情况下
if (domEle.setAttribute(“data-dpr”, v), !viewport) {
if (viewport = dom.createElement(“meta”), viewport.setAttribute(“name”, “viewport”), viewport.setAttribute(“content”, “initial-scale=” + initial_scale + “, maximum-scale=” + initial_scale + “, minimum-scale=” + initial_scale + “, user-scalable=no”), domEle.firstElementChild) {
domEle.firstElementChild.appendChild(viewport)
} else {
var m = dom.createElement(“div”);
m.appendChild(viewport), dom.write(m.innerHTML)
}
}
win.dpr = v;
win.addEventListener(“resize”, function() {
clearTimeout(timeCode), timeCode = setTimeout(resize, 300)
}, false);
win.addEventListener(“pageshow”, function(b) {
b.persisted && (clearTimeout(timeCode), timeCode = setTimeout(resize, 300))
}, false);
resize();
}(window);
执行完代码后你的页面就会跟随手机的宽度而自适应了,根本就不用什么媒体查询那些,很简洁,很
使用,站在巨人的肩膀上吧这就叫做!
**二》不用手动设置meta标签,并且自动获取到dpr是多少,根据dpr设置字体大小。为了适应平板,可以设置宽度为10rem,超出部分设置背景色。具体模仿手淘。
**
!function(N,M){
function L(){
var a=I.getBoundingClientRect().width;
a/F>540&&(a=540*F);
var d=a/10;
I.style.fontSize=d+“px”,D.rem=N.rem=d
}
var K,J=N.document,
I=J.documentElement,
H=J.querySelector(‘meta[name=“viewport”]’),
G=J.querySelector(‘meta[name=“flexible”]’),
F=0,
E=0,
D=M.flexible||(M.flexible={});
if(H){
console.warn(“将根据已有的meta标签来设置缩放比例”);
var C=H.getAttribute(“content”).match(/initial-scale=([\d.]+)/);
C&&(E=parseFloat(C[1]),F=parseInt(1/E))
}else{
if(G){
var B=G.getAttribute(“content”);
if(B){
var A=B.match(/initial-dpr=([\d.]+)/),
z=B.match(/maximum-dpr=([\d.]+)/);
A&&(F=parseFloat(A[1]),
E=parseFloat((1/F).toFixed(2))),
z&&(F=parseFloat(z[1]),
E=parseFloat((1/F).toFixed(2)))
}
}
}
if(!F&&!E){
var y=N.navigator.userAgent,
x=(!!y.match(/android/gi),
!!y.match(/iphone/gi)),
w=x&&!!y.match(/OS 9_3/),
v=N.devicePixelRatio;
F=x&&!w?v>=3&&(!F||F>=3)?3:v>=2&&(!F||F>=2)?2:1:1,
E=1/F
}
if(I.setAttribute(“data-dpr”,F),!H){
if(H=J.createElement(“meta”),
H.setAttribute(“name”,“viewport”),
H.setAttribute(“content”,“initial-scale=”+E+“, maximum-scale=”+E+“, minimum-scale=”+E+“, user-scalable=no”),
I.firstElementChild){
I.firstElementChild.appendChild(H)
}else{
var u=J.createElement(“div”);u.appendChild(H),J.write(u.innerHTML)
}
}
N.addEventListener(“resize”,function(){
clearTimeout(K),
K=setTimeout(L,300)
},!1),
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!