当前位置:首页>新闻中心>优化推广>建网站

JavaScript实现移动端页面按手机屏幕分辨率自动缩放

时间:2019-09-16   访问量:0

 手机的屏幕有大有小,移动web醉好做成响应式布局,也就是自适应屏幕,没有固定宽高,这样的话,在所有手机上都可以正常显示。关于移动端页面按手机屏幕分辨率自动缩放的js,先附上代码

<script>
 var phoneWidth = parseInt(window.screen.width);
 var phoneHeight = parseInt(window.screen.height);
 var phoneScale = phoneWidth/750;//除以的值按手机的物理分辨率
 var ua = navigator.userAgent;
 if (/Android (\\d+\\.\\d+)/.test(ua)) {
 var version = parseFloat(RegExp.$1);
 // andriod 2.3
 if (version > 2.3) {
 document.write('<meta name="viewport" content="width=device-width,initial-scale='+phoneScale+',minimum-scale='+phoneScale+',maximum-scale='+phoneScale+',user-scalable=no">');
 // andriod 2.3以上
 } else {
 document.write('<meta name="viewport" content="width=device-width,user-scalable=no">');
 }
 // 其他系统
 } else {
 document.write('<meta name="viewport" content="width=device-width, initial-scale='+phoneScale+',minimum-scale='+phoneScale+',maximum-scale ='+phoneScale +',user-scalable=no,">');
 }
</script>


做手机端页面醉头疼的就是物理分辨率和逻辑分辨率的转换了,当拿到设计图的时候,图基本都是按物理分辨率来设计的,一般常用的为640(iphone5/5s)、750(iphone6/6s),而谷歌等浏览器采用小手机模式浏览页面的时候,上面的值为逻辑分辨率,调试的时候很难把控页面样式,在手机端的样式也会因此大乱,在页面头部加入以上一段js之后,在手机端就可以正常显示了,

var phoneScale = phoneWidth/750;

除以的为设计图设计的页面宽度,750是按iphone6来设计(根据自己使用需求来修改),即让页面的 放大比率=屏幕的逻辑分辨率/物理分辨率,从而达到适应手机的效果。

(注意,有时候页面加了这段代码在调试的时候,切记刷新,刷新过后就会按手机缩放比例显示)

概念解析:

phys.width:一般我们所指的宽度width即为phys.width,物理宽度(物理分辨率)

device-width:又称为css-width,设备宽度(逻辑分辨率)

其中我们可以获取phys.width通过document.documentElement.clientWidth;

而获取css-width通过 window.screen.width获取。

所以这里  phoneWidth(逻辑分辨率) = parseInt(window.screen.width);

如iphone6的phys.width为750px,而css-width为375px。

明白一个浏览器默认行为。

试想,浏览器如果把电脑端的980px的网页展现在宽度为750px的iphone6手机屏上,势必会放不下,手机端横向会出现滚动条,怎么阻止这种情况呢,很简单,浏览器默认一个虚拟窗口,不同浏览器有不同的虚拟窗口宽度的默认值如:safari iphone:980px;

opera:850px;

Andriod webkit:800px;

IE:974px;

然后会把这个980px虚拟窗口装进宽度为750px的iphone6中,当然这样的话必须缩放,这就是为什么在手机中展现电脑端页面没有出现横向滚动条,而且字迹明显变小的原因。

initial-scale='+phoneScale+',minimum-scale='+phoneScale+',maximum-scale='+phoneScale+'

这段代码切记要指定 initial-scale=***,在安卓系统中,不指定默认的nitial-scale=***,只指定醉小和醉大缩放值,也可以正常显示,但是safari浏览器则会失效,对于宽度是100%的页面, 则显示为页面的30%左右的宽。

target-densitydpi=device-dpi

WebKit内核默认按照160的DPI来排版。假如设备真实DPI是480,宽度是1080,在WebKit会按160DPI,360宽度来排版。排版结束后在放大到1080宽。

所以当取window.innerwidth之类的值的时候,取的是WebKit实际排版宽度360,而不是1080.

target-densitydpi=device-dpi可以强制内核以480DPI排版,使画面更精细,window.innerwidth也将为屏幕宽度1080.

但WebKit从去年开始取消了对target-densitydpi的支持。(所以现在不建议写该属性了)

想实现target-densitydpi=device-dpi的效果有什么方法?提交此次补丁的WebKit开发者说可以用responsive images 和 CSS device units来替代。


相关文章
  • PBOOTCMS如何将详情页的 html后缀隐藏掉
    日期:2020-01-10 浏览量:14913
  • pbootcms 内容栏目栏目列表如何实现排序?
    日期:2019-12-02 浏览量:21644
  • pbootcms关于对访问终端的判断。
    日期:2019-09-16 浏览量:13162
  • JavaScript实现移动端页面按手机屏幕分辨率自动缩放
    日期:2019-09-16 浏览量:11734
  • 网站建设中JS判断手机终端
    日期:2019-09-16 浏览量:11894
  • PB通过API接口,实现Ajax无刷新加载内容,下滑自动加载更多新闻
    日期:2019-08-24 浏览量:11732
  • PbootCms网站发送留言短信给手机的两种解决方案
    日期:2019-08-24 浏览量:12400
  • PBOOCMS如何制作文章评论。
    日期:2019-08-23 浏览量:12620
  • PbootCms 使用Ajax无刷新提交留言及表单
    日期:2019-08-21 浏览量:12174
  • pbootcms 使用技巧教程(二) - 自定义分页样式
    日期:2019-08-21 浏览量:12533
  • 热门文章
  • pbootcms 内容栏目栏目列表如何实现排序?
    日期:2019-12-02 浏览量:21644
  • PBOOTCMS如何将详情页的 html后缀隐藏掉
    日期:2020-01-10 浏览量:14913
  • pbootcms 模板制作教程(七) - 单页内容的调用
    日期:2019-08-21 浏览量:14073
  • PbootCMS小程序API的封装步骤教程
    日期:2019-08-21 浏览量:13513
  • PBOOTCMS 让网站域名权重集中,提升SEO效果 301
    日期:2019-08-21 浏览量:13373
  • PBOOTCMS 一个列表中调取多个栏目的的内容
    日期:2019-08-21 浏览量:13353
  • PBOOTCMS 模板制作教程(五) - 多级导航菜单
    日期:2019-08-21 浏览量:13271
  • pbootcms关于对访问终端的判断。
    日期:2019-09-16 浏览量:13162
  • PBOOTCMS 模板制作教程(四) - 灵活熟练地使用模板标签
    日期:2019-08-21 浏览量:13155
  • PBOOTCMS 模板制作教程(一) -认识并理解模型概念
    日期:2019-08-21 浏览量:12942
  • 在线咨询

    点击这里给我发消息 售前咨询专员

    点击这里给我发消息 售后服务专员

    咨询

    免费通话

    24小时免费咨询

    请输入您的联系电话,座机请加区号

    通话

    微信扫一扫

    微信
    返回