• 【html5移动web开发】关于移动端开发


    1.Google Analytics分析工具的使用:注册后页面中加入Google Analytics的代码,可以分析出有哪些设备在访问网站或者哪些页面访问量比较大、

    2.Modernizr 可以检测浏览器对html5元素的支持性。可以判断是否支持localstorage等等

    3.html5元素在旧版本的IE浏览器下显示为块级元素   article,aside,nav,section{ display:block;}

    4.PC端采用固定布局与流体布局,而在移动网站中我们始终使用流体布局,它可以使你的网站适应不同的设备尺寸。  

     比如:竖屏下显示一列,横屏下显示2列(合理利用每个像素)

    5.清除html5元素的默认样式

     article,aside,section……{ margin:0; padding:0;border:0;font-size:100%;font:inherit; vertical-align:baseline;}

    6.页面重置字体大小:-webkit-text-size-adjust:none;

             -webkit-text-size-adjust:none;如果在Pc桌面访问,或者通过其他的非移动设备的浏览器访问,会导致页面的缩放功能会被禁用。

             IPhone:  html{-webkit-text-size-adjust:100%;} 

             微软  html{-ms-text-size-adjust:100%;}

    7.媒介查询(media query)

     @media screen and (min-320px){   }

    8.同一个局域网下,可以使用XAMPP配置移动开发环境(本地网站服务),确认电脑和移动设备是在同一无线网络中。通过IP地址即可以访问

    9.如果你的主要用户使用iphone和移动版safari,在桌面电脑上测试可以节约很多时间。打开safari,偏好设置---高级栏---开发---用户代理---Mobile safari 3.1.3-IPhone

    10.通过界面图标启动web应用

       Retina屏幕采用114*114的图标

      <link rel='apple-touch-icon-precomposed' sizes='114*114' href='apple-touch-icon-114*114-precomposed.png'>

         ipad使用72*72的图标

      未使用Retina屏幕的的IPhone和Android 2.1以上版本的设备,使用57*57的图标

       对于诺基亚塞班的设备,一个快捷键图标只是用来告诉移动设备这个图标的位置。

      <link rel='shortcut icon' href='img/1/apple-touch-icon.png'>

     11.(文字过小,不易读),为了让手机能获得更好的网页浏览体验,引入了viewport meta标签,它的作用就是创建一个虚拟视口,而这个虚拟窗口的分辨率接近于桌面显示器,Apple将其默认为980px,(如果不设置视口,它将会按照980像素的宽度渲染页面)

          <meta name ='viewport' content='width=device-width'>

    12.有些古老的移动设备浏览器不能识别viewport属性,对于这些浏览器,使用如下的代码:

      <meta name='HandheldFriendly' content='true'>   //PalmOS、AvantGo和黑莓设备

         对于微软的PocketPC  <meta name='MobileOptimized' content='320'>

    13.IOS设备  移动版Safari有个烦人的问题就是:当你从竖屏模式切换到横屏模式的时候,浏览器上的文本字体会突然变大。(IOS7.2测试没这个问题)

         怎么解决此问题呢 <meta name='viewport' content='width=device-width, initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0 '

         但是会造成无法缩放,眼睛不好文字无法放大造成不易阅读的状况,所以就采用监听手势事件,当手势开始的时候就viewport设为默认值  默认最大放大1.6,最小为0.25

        //检测所有的meta,设置它的viewport属性,最大为1.6,最小为原大小的0.25  ,iphone自带的gesturestart事件  bug:有时候第一次不起效果,第二次才能正常工作ios4

    <script>
        var metas = document.getElementsByTagName('meta');
        var i;
        if (navigator.userAgent.match(/iPhone/i)) {
        for (i=0; i<metas.length; i++) {
         if (metas[i].name == "viewport") {
            metas[i].content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0";
            }
        }
        document.addEventListener("gesturestart", gestureStart, false);
        }
        function gestureStart() {
         for (i=0; i<metas.length; i++) {
            if (metas[i].name == "viewport") {
                metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";
            }
        }
                }
            </script>

     13.手机启动google map地图,只需要<a href='http://maps.google.com/maps?q=cupertino'>添加地图,可以设置参数以便选择出发地和目的地

    14.iphone下全屏模式启动,把该页添加为标签,然后通过界面图标启动(web应用)

        <meta name='apple-mobile-web-app-capable' content='yes'>  当Web应用从界面图标启动时,以全屏模式启动,隐藏浏览器上部的工具栏、地址栏和底部的加载状态栏

      <meta name='apple-mobile-web-app-status-bar-style' content='black'>   在浏览器的顶部显示一个状态栏

       <link rel='apple-touch-startup-image' href='img/1/splash.png'>   在程序启动、加载的时候,显示一个预加载的界面,告诉用户该程序正在加载

       IPhone和ipad因为屏幕大小的差异,因此需要不同大小的预加载界面

        var filename = navigator.platform === 'ipad' ?  'h/' :  'i/';

      document.write('<link rel="apple-touch-startup-image" href="/img/'+filename +'splash.png"/>');

    15.表单在ios聚焦时会出现放大。如何禁用放大的功能

        //输入框onfocus的时候viewport的属性  maximum-scale=1  ,blur失去焦点的时候maximum-scale=10  

    <script>
        var $viewportMeta = $('meta[name="viewport"]');
        $('input,select,textarea').bind('focus blur',function(event){
            $viewportMeta.attr('content','width=device-width,initial-scale=1,maximum-scale=' + (event.type=='blur'? 10:1) );
        }
    </script>
    

    16.如何禁用或者限制部分Webkit特性,比如说<a>链接点击的时候会出现提示是“打开链接  还是  复制     还是新的页打开 ”  

         解决办法:.nocallout {-webkit-touch-callout: none;} 

        如何在内容溢出的时候显示省略号   //禁止换行,超出内容隐藏显示省略号   white-space:nowrap;overflow:hidden;text-overflow:ellipsis

      如何限制复制粘贴功能 -webkit-user-select:text

     如何修改点击之后的背景颜色  -webkit-tap-highlight-color:rgba(0,0,0,0);

       如何让文本内容可编辑   contenteditable=true

    <!doctype html>
    <html>
      <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="apple-mobile-web-app-capable" content="yes">
      <style>
       html {color:#ff9;}
      .a{ white-space: nowrap; overflow: hidden; text-overflow:ellipsis; -webkit-user-select:text;}//内容出现省略号
      .nocallout {-webkit-touch-callout: none;} 
      #targetarea {200px; height:120px; padding-top:80px; background:#ccc; text-align:center; font-size:20px;}
      </style>
      </head>
      <body>
        <header >
           
        </header>
        <div id="targetarea" class="nocallout"   contenteditable=true>
          <a class="nocallout" href="http://www.google.com" target="_blank">Google</a>
        </div>
        <footer>
        </footer>
      </body>
    </html>
    

    17.移动端交互:

         1)利用触控来移动页面元素  

         2)横竖屏切换事件

         3)利用手势来旋转页面元素

         4)利用滑动来创建图库

         5)利用手势来缩放页面元素

     //移动页面元素,移动版safari不允许event对象的touches和changedTouches属性被拷贝给其他对象,我们可以使用event.originalEvent来解决这个问题

       (灰色部分是想让拖动点就在它的中心点上,自己测试所得。灰色前面部分是书上所写) 

        <script>
        $('#someElm').bind('touchmove',function(event){
            event.preventDefault();
            var touch = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0];  
            var elm = $(this).offset();
            var x = touch.pageX - elm.left/2;     // var x= touch.pageX  - elem.width()/2  ;
            var y = touch.pageY - elm.top/2;
            $(this).css('left', x+'px');
            $(this).css('top', y+'px');
        });
        </script>

     //横竖屏切换事件 (有时你需要禁止横竖屏的自动切换,比如开发游戏。对于原生应用这很容易,但对于网页应用非常困难。)

            <script>
                var metas = document.getElementsByTagName('meta');
                var i;
                if (navigator.userAgent.match(/iPhone/i)) {
                    for (i=0; i<metas.length; i++) {
                        if (metas[i].name == "viewport") {
                            metas[i].content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0";
                        }
                    }
                    document.addEventListener("gesturestart", gestureStart, false);
                }
                function gestureStart() {
                    for (i=0; i<metas.length; i++) {
                        if (metas[i].name == "viewport") {
                            metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";
                        }
                    }
                }
            </script>
        
            <script>
          $(window).bind('orientationchange',function(event){
            updateOrientation(event.orientation);//横屏时文字变为“LANDSCAPE”模式  ,竖屏时文字变为“PORTAIT”
          })
                function updateOrientation(orientation) {
            $("#a").html("<p>"+orientation.toUpperCase()+"</p>");
                }
            </script>

      //横竖屏切换小示例,竖屏下文字旋转90度,横屏下正常(竖屏下旋转90度其实就是想提示用户要横屏操作)

    <!doctype html>
    <html>
        <head>
            <title>Mobile Cookbook</title>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <link rel="stylesheet" href="css/style.css">
            <link  href="http://fonts.googleapis.com/css?family=Kranky:regular" rel="stylesheet" type="text/css" >
            <style>
            body {
                font-family: 'Kranky', serif;
                font-size: 36px;
                font-style: normal;
                font-weight: 400;
                text-shadow: none;
                text-decoration: none;
                text-transform: none;
                letter-spacing: 0em;
                word-spacing: 0em;
                line-height: 1.2;
            }
            </style>
        </head>
        <body>
            <div id="screen">
                <div id="loader">enter the game</div>
            </div>
            <script>
                var metas = document.getElementsByTagName('meta');
                var i;
                if (navigator.userAgent.match(/iPhone/i)) {
                    for (i=0; i<metas.length; i++) {
                        if (metas[i].name == "viewport") {
                            metas[i].content = "width=device-width, minimum-scale=1.0, maximum-scale=1.0";
                        }
                    }
                    document.addEventListener("gesturestart", gestureStart, false);
                }
                function gestureStart() {
                    for (i=0; i<metas.length; i++) {
                        if (metas[i].name == "viewport") {
                            metas[i].content = "width=device-width, minimum-scale=0.25, maximum-scale=1.6";
                        }
                    }
                }
                window.onorientationchange = function() {
                    update();
                }
                function update() {
                    switch(window.orientation) {
                        case 0:   // Portrait
                        case 180: // Upside-down Portrait
                            var cWidth = window.innerWidth;
                            var cHeight = window.innerHeight;
                            document.getElementById("screen").style.width = cHeight-36+'px';
                            document.getElementById("screen").style.height = cWidth+'px';
                            break;
                        case -90: // Landscape: turned 90 degrees counter-clockwise
                        case 90:  // Landscape: turned 90 degrees clockwise
                            var cWidth = window.innerWidth;
                            var cHeight = window.innerHeight;
                            document.getElementById("screen").style.width = "100%";
                            document.getElementById("screen").style.height = "auto";
                            break;
                    }
                }
                update();
            </script>
            <script>
                
            </script>
        </body>
    </html>
        
    View Code

    // 利用手势来旋转页面元素(iphone5测试没通过) ---监听ongesturechange事件,再利用css3 transform:rotate(0deg)原理

    <script>
        var rotation =0 ;
        var node = document.getElementById('someElm'); 
        node.ongesturechange = function(e){  
             var node = e.target;
          //alert(e.rotation);
          // scale and rotation are relative values,
          // so we wait to change our variables until the gesture ends
          node.style.webkitTransform = "rotate(" + ((rotation + e.rotation) % 360) + "deg)";
          //alert("rotate(" + ((rotation + e.rotation) % 360) + "deg)");
        }
         
        node.ongestureend = function(e){
          // Update the values for the next time a gesture happens
          rotation = (rotation + e.rotation) % 360;
        }
        </script>

    //利用滑动来创建图库,主要是用的jquery mobile的swipeleft,swiperight事件

    <!doctype html>
    <html>
      <head>
            <title>Mobile Cookbook</title>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <style>
                html, body {
                    padding:0;
                    margin:10px auto;
                }
                #checkbox {
                    border:5px solid #ccc; 
                    width:30px; 
                    height:30px;
                }
                #wrapper {
                    width:210px;
                    height:100px;
                    position:relative;
                    overflow:hidden;
                    margin:0 auto;
                }
                #inner {
                    position:absolute;
                    width:630px;
                }
                #inner div {
                    width:200px;
                    height:100px;
                    margin:0 5px;
                    background:#ccc;
                    float:left;
                }
                .full-circle {
                     background-color: #ccc;
                     height: 10px;
                     -moz-border-radius:5px;
                     -webkit-border-radius: 5px;
                     width: 10px;
                     float:left;
                     margin:5px;
                }
                .cur {
                    background-color: #555;
                }
                #btns {
                    width:60px;
                    margin:0 auto;
                }
            </style>
      </head>
      <body>
        <header>
        </header>
            <div id="main">
                <div id="wrapper">
                    <div id="inner">
                        <div></div>
                        <div></div>
                        <div></div>
                    </div>
                </div>
                <div id="btns">
                    <div class="full-circle cur"></div>
                    <div class="full-circle"></div>
                    <div class="full-circle"></div>
                </div>
            </div>
        <footer>
        </footer>
            <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
            <script src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>
            <script>
            var curNum = 0;
            $('#wrapper').swipeleft(function () {
          //alert('hi');
                $('#inner').animate({
                left: '-=210'
                }, 500, function() {
                    // Animation complete.
                    curNum +=1;
                    $('.full-circle').removeClass('cur');
                    $('.full-circle').eq(curNum).addClass('cur');
                });
            });
            
            $('#wrapper').swiperight(function () {
                $('#inner').animate({
                left: '+=210'
                }, 500, function() {
                    // Animation complete.
                    curNum -=1;
                    $('.full-circle').removeClass('cur');
                    $('.full-circle').eq(curNum).addClass('cur');    
                });
            });
            </script>
        </body>
    </html>
        
    
    
     
    View Code

    //利用手势操作图片缩放---当缩放手势触发,我们可以获取缩放的信息,并且基于此放大或缩小页面元素  event.scale

    <script>
    var width = 100, height = 100;
    var node = document.getElementById('frame');
    node.ongesturechange = function(e){
        var node = e.target;
        node.style.width = (width * e.scale) + "px";
        node.style.height = (height * e.scale) + "px";
        alert(node.style.width);
    }
    node.ongestureend = function(e){
        width *= e.scale;
        height *= e.scale;
    }
    </script>

    延伸:

    两指多点触摸,事件的触发顺序如下:(最好的例子:google map 、百度地图)

    1 手指1的touchstart:当手指触摸到屏幕时触发
    2 手指2的touchstart:当手指触摸到屏幕时触发
    3 gesturestart:当第二个手指触摸屏幕时触发
    4 gesturechange:当两个手指保持触摸并开始移动时触发
    5 手指1的touchend:当第一根手指离开屏幕时触发
    6 手指2的touchend:当第二根手指离开屏幕时触发,紧接着gestureend触发
    7 gestureend:当第二根手指离开屏幕时触发

      

      

  • 相关阅读:
    Linux下C程序的反汇编【转】
    数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)【转】
    linux arm的存储分布那些事之一【转】
    linux arm mmu基础【转】
    linux 进程内存解析【转】
    如何更方便的查看Linux内核代码的更新记录【转】
    设备树解析【转】
    分析内核源码,设备树【转】
     Meltdown论文翻译【转】
    device tree --- #address-cells and #size-cells property【转】
  • 原文地址:https://www.cnblogs.com/positive/p/3958569.html
Copyright © 2020-2023  润新知