zoukankan      html  css  js  c++  java
  • 移动端用PX为单位+JS框架 实现页面布局 鲁中O

    一:大家先下载metahandler.js

    二:准备一个用px实现的移动页面(宽度固定死的页面),引入metahandler.js框架

    1、视口设置
    width=640,是根据psd图来设置,有多宽设置多宽(设计图是640的设置640)
    <meta content="target-densitydpi=device-dpi,width=640" name="viewport">

    2.  引入MetaHandler.js

    <script type="text/javascript" src="js/MetaHandler.js"></script>

    3、body设置宽度

    body{ width:640px; }
    三:修改MetaHandler.js文件的最后配置代码。在执行fixViewportWidth函数时,传入相应的像素值作为参数即可。
    opt.fixViewportWidth(640);   //   调用自适应屏幕的功能函数,640是根据psd图来设置,有多宽设置多宽
    四.  然后按照电脑端的制作就可以了  全程用PX就可以的
    五:横屏存在的兼容问题(测试地址http://c.3g.163.com/CreditMarket/default.html

    在使用谷歌浏览器进行浏览时,如果横屏后点击刷新,则页面会再缩小,成为居中显示状态,此时再竖屏之后,左右也会留白(此时再刷新是能重新恢复正常)。具体效果如下。

    横屏后再刷新的效果:

    从横屏恢复到纵屏的状态:

    我们的看法:很少有人在旋转到横屏之后再刷新页面。而且目前移动端使用谷歌浏览器的人也很少,所以个人感觉这个bug是可以忽略的。另外,对于横屏转回到纵屏的时候,实际上我们是可以进行设备方向检测,然后再触发一次页面刷新,就不会出现纵屏上的问题了~

    最后的话:我们使用了这个框架进行页面的开发,但是最近在使用时,感觉到在一些浏览器当中有些卡顿,用同样的设备和浏览器去测试了网易的手机页面,倒是没有什么卡顿现象,关于卡顿的问题,目前还在思考当中~~~

    六:metahandler.js应用成功案例
    1、http://c.3g.163.com/CreditMarket/default.html
    2、http://m.deja.me/topics/#/special/9
    3、http://impicture.lofter.com/

    最终:  JS代码

    !function () {
       var opt = function() {
           var ua = navigator.userAgent,
               android = ua.match(/(Android);?[\s\/]+([\d.]+)?/),
               ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
               ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/),
               iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
               os = {};
    
    
           if (android){ os.android = true, os.version = android[2];}
           if (iphone && !ipod) {os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');}
           if (ipad) {os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');}
           if (ipod) {os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;}
    
    
           var MetaHandler = function(){
               //MONOSTATE
               if(MetaHandler.prototype.instance){
                   return MetaHandler.prototype.instance;
               }
               var me = this;
               var meta = {},_els;
    
    
               /**
                * _els
                * meta = {name:{content:String,seriation:Array,store:{property:String},...},...}
                * @method init
                */
               function init(){
                   _els = document.getElementsByTagName('meta');
                   for(var i=0;i<_els.length;i++){
                       var name = _els[i].name;
                       if(name){
                           meta[name] = {};
                           meta[name].el = _els[i];
                           meta[name].content = _els[i].content;
                           meta[name].seriation = meta[name].content.split(',');
                           meta[name].store = getContentStore(name);
                       }
                   }
                   return me;
               }
               function getContentStore(name){
                   var content = meta[name].seriation,store = {};
                   for(var i=0;i<content.length;i++){
                       if(content[i].length<1){
                           content[i] = null;
                           delete content[i];
                           content.length--;
                       }else{
                           var ct = content[i].split('='),
                               pp = ct[0];
                           if(pp){
                               store[pp] = ct[1];
                           }
                       }
                   }
                   return store;
               }
               this.hasMeta = function(name){
                   return meta[name]?1:0;
               }
               this.createMeta = function(name){
                   if(!this.hasMeta(name)){
                       var el = document.createElement('meta');
                       el.name = name;
                       document.head.appendChild(el);
                       meta[name] = {};
                       meta[name].el = el;
                       meta[name].content = '';
                       meta[name].seriation = [];
                       meta[name].store = {};
                   }
                   return me;
               }
               this.setContent = function(name,value){
                   meta[name].content = value;
                   meta[name].el.content = value;
                   return me;
               }
               this.getContent = function(name){
                   return meta[name] && meta[name].content;
               }
               function updateContent(name){
                   meta[name].content = meta[name].seriation.join(',');
                   me.setContent(name,meta[name].content);
                   return me;
               }
               this.removeContentProperty = function(name,property){
                   var _property = property;
                   if(meta[name]){
                       if(meta[name].store[_property]!=null){
                           for(var i = 0;i<meta[name].seriation.length;i++){
                               if(meta[name].seriation[i].indexOf(property+'=')!=-1){
                                   meta[name].seriation[i] = null;
                                   delete meta[name].seriation[i];
                                   break;
                               }
                           }
                       }
                       updateContent(name);
                   }
                   return me;
               }
               this.getContentProperty = function(name,property){
                   return meta[name] && meta[name].store[property];
               }
               this.setContentProperty = function(name,property,value){
                   var _property = property,
                       pv = property+'='+value;
                   if(meta[name]){
                       if(meta[name].store[_property]!=null){
                           meta[name].store[_property] = value;
                           for(var i = 0;i<meta[name].seriation.length;i++){
                               if(meta[name].seriation[i].indexOf(property+'=')!=-1){
                                   meta[name].seriation[i] = pv;
                                   break;
                               }
                           }
                       }else{
                           meta[name].store[_property] = value;
                           meta[name].seriation.push(pv);
                       }
                       updateContent(name);
                   }
                   return me;
               }
    
    
               this.fixViewportWidth = function(width,fixBody){
                   width = width || me.getContentProperty('viewport','width');
                   if(width != 'device-width'){
                       var iw = window.innerWidth || width,
                           ow = window.outerWidth || iw,
                           sw = window.screen.width || iw,
                           saw = window.screen.availWidth || iw,
                           ih = window.innerHeight || width,
                           oh = window.outerHeight || ih,
                           sh = window.screen.height || ih,
                           sah = window.screen.availHeight || ih,
                           w = Math.min(iw,ow,sw,saw,ih,oh,sh,sah),
                           ratio = w/width,
                           dpr = window.devicePixelRatio;
                       ratio = Math.min(ratio,dpr);
    
    
                       //fixBody may trigger a reflow,you should not use it if you could do it in your css
                       if(fixBody){
                           document.body.style.width = width+'px';
                       }
    
    
                       if(os.android){
                           me.removeContentProperty('viewport','user-scalable')
                               .setContentProperty('viewport','target-densitydpi','device-dpi')
                               .setContentProperty('viewport','initial-scale',ratio)
                               .setContentProperty('viewport','maximum-scale',ratio);
                       }else if(os.ios && !os.android){
                           me.setContentProperty('viewport','user-scalable','no');
                           if(os.ios && parseInt(os.version)<7){
                               me.setContentProperty('viewport','initial-scale',ratio);
                           }
                       }
                   }
               }
               init();
               //MONOSTATE
               MetaHandler.prototype.instance = this;
           };
           return new MetaHandler;
       }();
    
    
       // HTML5友情提示 —— 调用自适应屏幕的功能函数
       opt.fixViewportWidth(1080);
    }();

     

  • 相关阅读:
    动态增加数据库表字段
    Centos7 + Python3.6 + Django + virtualenv + gunicorn + supervisor 环境配置详解
    typeof关键字简介 -rtti
    c++ typeid获取类型名-rtti
    C++ 中dynamic_cast&lt;&gt;的使用方法小结 -判断类型-rtti
    Java 8 Lambda表达式探险
    Lambda表达式详解
    android:ToolBar详解(手把手教程)(转)
    linux numfmt 命令--转换数字
    android mk odex问题 push apk 不生效
  • 原文地址:https://www.cnblogs.com/guozh/p/10603794.html
Copyright © 2011-2022 走看看