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 相关文章推荐
jQuery select控制插件
Aug 17 Javascript
JS request函数 用来获取url参数
May 17 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
Oct 25 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
label+input实现按钮开关切换效果的实例
Aug 16 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
Mar 14 Javascript
python虚拟环境 virtualenv的简单使用
Jan 21 Javascript
Vue的Options用法说明
Aug 14 Javascript
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
移动设备手势事件库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
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python科学计算之Pandas详解
2017/01/15 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
入党自我鉴定范文
2013/10/04 职场文书
采购员岗位职责
2015/02/03 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS