uniapp+Html5端怎么实现PC端适配

这篇文章给大家分享的是有关uniapp+Html5端怎么实现PC端适配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

前言:

uniapp+Html5端怎么实现PC端适配

使用uniapp做的h6页面,在PC端显示时,发现由于upx单位计算基准值太大,导致页面排班布局错乱

思路:

刚开始发现使用px单位不会导致页面布局混乱,但这对刚开启的项目友好,对已经成型的项目修改成本太高,风险也大,而且px是固定单位,在移动端显然没upx好使;

后来百度好久,发现都没有解决办法,偶然间突发奇想,能不能利用iframe在页面载入前将宽度设置为375px(750upx),来达到欺骗浏览器,欺骗uniapp,让浏览器以375px(这个值可以自己按需设置)基准值来计算upx=>px转换比,然后setimeout 300毫秒(延迟时间自己试验吧,不一定300ms效果最好)将iframe宽度设置为100%,这样一来在PC端就可以实现以375upx基准值渲染页面了;

说干就干,demo在下面

pages.json: (iframe为项目首页,用来判断是移动端还是PC端,并对PC端做适配处理)

{
"pages":[
{
"path":"pages/iframe"
},
{
"path":"pages/index/index"
}
],
"globalStyle":{
"navigationStyle":"custom",
"navigationBarTextStyle":"black",
"navigationBarTitleText":"DEMO",
"navigationBarBackgroundColor":"#F8F8F8",
"backgroundColor":"#F8F8F8"
}
}

pages/iframe页面

<stylelang="scss">
.container{
height:100%;
iframe{
display:block;
width:375px;
height:100%;
opacity:0;
animation:fadeShow.3sease-inforwards.3s;
}
}
@keyframesfadeShow{
0%{
opacity:0;
}
100%{
opacity:1;
}
}
</style>
<template>
<viewclass="containerflexjustify-center">
<iframev-if="!ismobile":src="url"frameborder="0":style="'width:'+width"></iframe>
</view>
</template>
<script>
exportdefault{
data(){
return{
url:'',
width:'',
ismobile:true,
};
},
onLoad(opt){
this.ismobile=this.isMobile();
leturl='pages/index/index';//你的首页
if(this.ismobile){
uni.redirectTo({
url:`/${url}`
})
}else{
this.url=`${location.href}${url}`;
this.width='375px';
setTimeout(()=>{
this.width='100%';
},300)
}
},
onShow(){

},
methods:{
isMobile(){
letflag=navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|WindowsPhone)/i)
returnflag?true:false;
}
}
};
</script>

缺陷:

f5刷新页面时又会回到iframe初始页面

2019/11/25更新:

好吧,今天去官方社区逛了一圈,发现有大神已经提出PC端适配方案了,就几句代码就OK了,突然发现我真是蠢啊,┭┮﹏┭┮

基于大神的方案修改了下:

新建一个pc.js,随便找个地方放着,内部代码如下(变量sw值的设置,你们觉得怎么好看怎么来吧,下面的是我根据我的感觉设置的,适配到8K屏幕了):

;(function(){
varu=navigator.userAgent,
w=window.innerWidth;
if(!u.match(/AppleWebKit.*Mobile.*/)||u.indexOf('iPad')>-1){
varsw=w*576/1920;
window.innerWidth=sw<375?375:sw;
window.onload=function(){
window.innerWidth=w;
}
}
})();

然后再main.js里面引入pc.js

注意,pc.js一定要在App实例引入前引入,不然无效!!!

import'@/static/js/pc'
importVuefrom'vue'
importAppfrom'./App'

这样做的好处是刷新页面时,页面之前的栈还在,不会像用iframe那样刷新后就回到首页;

至于我上面方案直接无视吧!┗( ▔, ▔ )┛

2019/11/26更新:

pc.js修改成下面这样, PC端样式就可以实现1upx = 1rpx = 1px;这样非常方便的1:1还原设计图了

当然如果你的设计图不是1920,比如是1366,那下面就改成这样window.innerWidth = 750*(w / 1366);

;(function(){
varu=navigator.userAgent,
w=window.innerWidth;
if(!u.match(/AppleWebKit.*Mobile.*/)||u.indexOf('iPad')>-1){
window.innerWidth=750*(w/1920);
window.onload=function(){
window.innerWidth=w;
}
}
})();

感谢各位的阅读!关于“uniapp+Html5端怎么实现PC端适配”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2021-03-21 22:37:03
收藏
分享
海报
0 条评论
175
上一篇:HTML5中如何开发动态音频图 下一篇:HTML5如何实现图层的叠加
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码