移動網頁製做經驗

大概四個月前作了個比較常見的手機端的項目,日子久了,可貴有心情來總結下css

地址:http://aola.100bt.com/film/wap/html

前言:html5

  頁面依賴zepto和iSlider,自適應佈局(使用rem),適應終端最小寬度爲320px,要用一段用了很久的代碼css3

$(window).resize(function(){
    $("html").css("font-size",~~$(window).width()*12/320);
}).resize()

 

一、頁面加載:web

移動端不一樣網頁,考慮到網速問題,通常須要加載完全部圖片資源再進入頁面(受修改豆豆遊戲的經驗):數組

腳本以下瀏覽器

var source = (function(){
    var exports = {};
    exports.target=$('<div id="sourceLoading-Msg id='+Math.random()+'"></div>');
    var sourceMap = [
        "./style/logo.png?20150720",
        "./style/music.png?20150720",
        "./style/music-off.png?20150720",
        "./style/bg1.jpg?20150720",
        "./style/bg2.jpg?20150720",
        "./style/bg3.jpg?20150720",
        "./style/bg4.jpg?20150720",
        "./style/bg5.jpg?20150720",
        "./style/page1/bulding.png?20150720",
        "./style/page1/font.png?20150720",
        "./style/page1/hand.png?20150720",
        "./style/page1/light.png?20150720",
        "./style/page1/liuxing1.png?20150720",
        "./style/page1/liuxing2.png?20150720",
        "./style/page1/star.png?20150720",
        "./style/page2/dot1.png?20150720",
        "./style/page2/dot2.png?20150720",
        "./style/page2/text.png?20150720",
        "./style/page2/animal.png?20150720",
        "./style/page4/font.png?20150720",
        "./style/page4/font1.png?20150720",
        "./style/page4/font2.png?20150720",
        "./style/page4/icon.png?20150720",
        "./style/page4/img.png?20150720",
        "./style/page5/btn.png?20150720",
        "./style/page5/star1.png?20150720",
        "./style/page5/star2.png?20150720",
        "./style/page5/tip.png?20150720",
        "./style/page5/text.png?20150720",
        "./style/rollingbg/r1.jpg?20150720",
        "./style/rollingbg/r2.jpg?20150720",
        "./style/rollingbg/r5.jpg?20150720",
        "./style/rollingbg/r6.jpg?20150720",
        "./style/rollingbg/r7.jpg?20150720",
        "./style/rollingbg/r8.jpg?20150720",
        "./style/rollingbg/r9.jpg?20150720",
        "./style/rollingbg/r10.jpg?20150720",        
        "./style/rollingbg/t1.png?20150720",
        "./style/rollingbg/t2.png?20150720",
        "./style/rollingbg/t5.png?20150720",
        "./style/rollingbg/t7.png?20150720",
        "./style/rollingbg/t8.png?20150720",
        "./style/rollingbg/t9.png?20150720",
        "./style/rollingbg/t10.png?20150720",
        "./style/rollingbg/d1.png?20150720",
        "./style/rollingbg/d2.png?20150720",
        "./style/rollingbg/d5.png?20150720",
        "./style/rollingbg/d7.png?20150720",
        "./style/rollingbg/d8.png?20150720",
        "./style/rollingbg/d9.png?20150720",
        "./style/rollingbg/d10.png?20150720"
    ];
    exports.loading=function(){
        var len = sourceMap.length;
        var count = 0;
        function checkedLoadComplate(){
            count++
            if(count == len){
                exports.target.trigger("sourceComplate");
            }
        }
        $.each(sourceMap,function(i,v){
            var img = new Image();
            img.onload = function(){
                checkedLoadComplate()
            }
            img.onerror = function(){
                checkedLoadComplate()
            }
            img.src = v;
        })
    }
    return exports;
})()

腳本很簡單,由於頁面主要大致積資源爲圖片資源,因此新建了一個sourceMap的數組記錄資源位置,而後再下載什麼的,下載完以後拋個事件出來app

加載資源要配個小動畫,純css3實現,喜歡的話可拿去,不限版權dom

.loading{z-index:100;width:3rem;height:3rem;background:#44cae6;left:50%;margin:-1.5rem 0 0 -1.5rem;top:50%;}

@-webkit-keyframes loading{
    0%{-webkit-transform:rotateX(180deg);}
    25%{-webkit-transform:rotateX(360deg);}
    50%{-webkit-transform:rotateY(180deg);}
    100%{-webkit-transform:rotateY(360deg);}
}
.animate_loading{-webkit-animation:loading 2s linear 0ms infinite normal;}

css3的keyframe和animation使用了好屢次了,單好像每次都要查資料,老是不記得格式,估計是英文水平很差。。。。ide

格式爲:

//定義
keyframes  name{
   num%{style}
   num%{style}
  ....    
}
//使用
.animation{animation:name  duration timing-function delay  iteration-count direction}

定義的連接:http://www.w3school.com.cn/css3/css3_animation.asp

 

二、頁面切換

  原本本身寫了一個,後面不怎麼好兼容國內的無良瀏覽器,就換了iSlider

  以後經驗得出:qq和uc瀏覽器,在touchStart時須要先調用 event.preventDefault(),否則會在事件響應的時候產生一些問題,

  詳情能夠看這個:http://bbs.uc.cn/thread-4947182-1-1.html,具體狀況以下圖:

 

 

後面本身在作一個手勢插件(JTouch:http://www.cnblogs.com/peace1/p/4619380.html)時候也hack了一把~

 

 

三、聲音播放

聲音播放其實很簡單,不過是本身查資料寫的,因此也貼上來吧:

調用的話 只須要傳入資源路徑就行了

 1 var audio = (function(){
 2     var exports ={};
 3     var ctrlHtml = '<span class="ui-music-btn pa"></span>';
 4     var  _audio = new Audio;
 5     var $hand;
 6     exports.init = function(resourcePath){
 7         $("body").append(ctrlHtml);
 8          var e = {loop: !0,preload: "auto",src: resourcePath,autoplay:false};
 9         for (var i in e){
10             e.hasOwnProperty(i) && (_audio[i] = e[i])
11         }
12         $hand = $(".ui-music-btn");
13         $hand.on("touchstart",function(){
14             if(_audio.paused){
15                 _audio.play();
16                 window.userSetAudioOn=true;
17             }else{
18                 _audio.pause();
19                 window.userSetAudioOn=false;
20             }
21         });
22         $("body").one('touchstart',function(e){
23             if($(e.target).hasClass("ui-music-btn")){
24                 return false;
25             }else{
26                 _audio.play();
27             }
28         });
29         _audio.play();
30     }
31     exports.audio = _audio;
32     $(_audio).on("pause",function(){
33         $hand.addClass("ui-music-btn-off");
34     }).on("playing",function(){
35         $hand.removeClass("ui-music-btn-off");
36     })
37     exports.init();
38     exports.$hand=$hand;
39     return exports;
40 })()

移動開發在html5API使用上仍是挺好的,本身查查就能用,不用使用過多的腳本hack低版本瀏覽器。

不過有一點:有些產品想要一進入頁面就能播放聲音,卻在大多數手機的瀏覽器都不成功

不管是使用代碼直接調用audio.play(),仍是在事件綁定了audio.play(),而後調用事件,都不成功,

最後在查資料才發現出於用戶友好,須要用戶本身觸發事件才能調用音頻、視頻,因此之後遇到這種需

求仍是直接拒絕好了。

 

 

大概就只記得這些了,之後作了東西仍是早點寫筆記的好

相關文章
相關標籤/搜索