JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码


Posted in Javascript onAugust 18, 2017
 手机的屏幕有大有小,移动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来替代。

参考链接:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助~如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持!

Javascript 相关文章推荐
浅谈javascript的数据类型检测
Jul 10 Javascript
script标签的 charset 属性使用说明
Dec 04 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
关于编写性能高效的javascript事件的技术
Nov 28 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
AngularJs 弹出模态框(model)
Apr 07 Javascript
jQuery实现文档树效果
Feb 20 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
Jun 08 Javascript
vue移动端UI框架实现QQ侧边菜单组件
Mar 09 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
Aug 31 Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 Javascript
移动设备手势事件库Touch.js使用详解
Aug 18 #Javascript
JavaScript你不知道的一些数组方法
Aug 18 #Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 #Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
Aug 18 #Javascript
JS实现页面打印(整体、局部)
Aug 18 #Javascript
简单实现jQuery轮播效果
Aug 18 #jQuery
JavaScript编写的网页小游戏,很给力
Aug 18 #Javascript
You might like
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
php正则修正符用法实例详解
2016/12/29 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
常用的Javascript设计模式小结
2015/12/09 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python3 反射的四种基本方法解析
2019/08/26 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
你们项目是如何进行变更控制的
2015/08/26 面试题
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
小学教师读书活动总结
2014/07/08 职场文书
建筑工地文明标语
2014/10/09 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python