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去掉字符串里的所有空格
Feb 08 Javascript
不用MOUSEMOVE也能滑动啊
May 23 Javascript
jQuery Autocomplete自动完成插件
Jul 17 Javascript
textarea中的手动换行处理的jquery代码
Feb 26 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
javascript教程之不完整的继承(js原型链)
Jan 13 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
实例解析jQuery中proxy()函数的用法
May 24 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
基于element-ui组件手动实现单选和上传功能
Dec 06 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
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
详解vue 组件注册
2020/11/20 Vue.js
python中mechanize库的简单使用示例
2014/01/10 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
对Python3中的input函数详解
2018/04/22 Python
Python匿名函数及应用示例
2019/04/09 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
python实现静态服务器
2019/09/05 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
Python生成器常见问题及解决方案
2020/03/21 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
小学学校门卫岗位职责
2014/08/03 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
Python打包为exe详细教程
2021/05/18 Python
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python