123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*
- * 使用说明:
- * 本程序以完成固定宽度布局的网页在iPhone/Android设备上浏览时可以适配设备屏幕宽度(竖屏浏览, 暂未支持横屏浏览)
- * 为目的。正常运行的环境是: iPhone/Android设备的自带浏览器.
- * 如有问题,意见或建议,请到我的博客页面留言,或发送邮件.
- * 其他移动版浏览器的适配问题, 不在本程序处理范围, 若有相关问题, 请留言或发送邮件.
- *
- * 博客页面地址:
- * http://www.cnblogs.com/plums/archive/2013/01/10/WebApp-fixed-width-layout-of-multi-terminal-adapter-since.html
- * 邮箱: limuchen12@126.com
- *
- * 在引入本程序后,请执行如下两步操作:
- * 1、对于js不能够正确获取到屏幕宽度的设备, 请使用
- * adaptUILayout.regulateScreen.add(设备name, 设备userAgent字符串标示或正则, {
- * width : 设备width,
- * height : 设备height
- * });
- *
- * //Example:
- * adaptUILayout.regulateScreen.add('三星 I9100G', 'GT-I9100G', {
- * width : 480,
- * height : 800
- * });
- * 录入设备屏幕尺寸, 以便程序可以正确的处理适配.
- * 也可以将已知设备的尺寸都录入程序.
- *
- * ### 对于如上数据, 大家也可以到我的博客页面留言板块贴出来与大家分享,
- * 我会收集并添加到程序中去, 以互相帮助, 减少大家的整体工作量. 谢谢!
- *
- * 2、使用如下代码启动适配
- * adaptUILayout.adapt(布局宽度);
- *
- * Example:
- * adaptUILayout.adapt(480);
- *
- */
- var adaptUILayout = (function(){
-
- //根据校正appVersion或userAgent校正屏幕分辨率宽度值
- var regulateScreen = (function(){
- var cache = {};
-
- //默认尺寸
- var defSize = {
- width : window.screen.width,
- height : window.screen.height
- };
-
- var ver = window.navigator.appVersion;
-
- var _ = null;
-
- var check = function(key){
- return key.constructor == String ? ver.indexOf(key) > -1 : ver.test(key);
- };
-
- var add = function(name, key, size){
- if(name && key)
- cache[name] = {
- key : key,
- size : size
- };
- };
-
- var del = function(name){
- if(cache[name])
- delete cache[name];
- };
-
- var cal = function(){
- if(_ != null)
- return _;
-
- for(var name in cache){
- if(check(cache[name].key)){
- _ = cache[name].size;
- break;
- }
- }
-
- if(_ == null)
- _ = defSize;
-
- return _;
- };
-
- return {
- add : add,
- del : del,
- cal : cal
- };
- })();
-
- //实现缩放
- var adapt = function(uiWidth){
- var
- deviceWidth,
- devicePixelRatio,
- targetDensitydpi,
- //meta,
- initialContent,
- head,
- viewport,
- ua;
- ua = navigator.userAgent.toLowerCase();
- //whether it is the iPhone or iPad
- isiOS = ua.indexOf('ipad') > -1 || ua.indexOf('iphone') > -1;
-
- //获取设备信息,并矫正参数值
- devicePixelRatio = window.devicePixelRatio;
- deviceWidth = regulateScreen.cal().width;
-
- //获取最终dpi
- targetDensitydpi = uiWidth / deviceWidth * devicePixelRatio * 160;
- //use viewport width attribute on the iPhone or iPad device
- //use viewport target-densitydpi attribute on the Android device
- initialContent = isiOS
- //? 'target-densitydpi=device-dpi, width=' + uiWidth + 'px, user-scalable=no'
- ? 'target-densitydpi=device-dpi, width=device-width, user-scalable=no'
- : 'target-densitydpi=' + targetDensitydpi + ', width=device-width, user-scalable=no';
- //: 'target-densitydpi=' + targetDensitydpi + ', width=' + uiWidth + 'px, user-scalable=no';
- //add a new meta node of viewport in head node
- head = document.getElementsByTagName('head');
- viewport = document.createElement('meta');
- viewport.name = 'viewport';
- viewport.content = initialContent;
- head.length > 0 && head[head.length - 1].appendChild(viewport);
- };
-
- return {
- regulateScreen : regulateScreen,
- adapt : adapt
- };
- })();
|