css3+js翻頁效果二:顆粒翻頁

css樣式:
*{margin: 0; padding: 0}
    #box{
        width:700px;
        height:400px;
        background:#ccc;
        position:relative;
        margin:100px auto;
    }
    #box span{
        width:100px;
        height:100px;
        position:absolute;
        transition: 1s all ease;
        transform-style: preserve-3d;
        transform: perspective(800px) rotate(0deg);
    }
    #box span .front{
        width:100%;
        height:100%;
        position:absolute;
        top:0;
        left:0;
        transform: translateZ(1px);
        background:url("img/0.jpg") no-repeat;
    }
    #box span .back{
        width:100%;
        height:100%;
        position:absolute;
        top:0;
        left:0;
        transform:scale(-1,1) translateZ(-1px);
        background:url("img/1.jpg") no-repeat;
    }
布局給個div就行:
<div id="box">
    <!--<span>
        <em class="front"></em>
        <em class="back"></em>
    </span>
    <span></span>-->
</div>
js代碼
document.addEventListener('DOMContentLoaded',function(){
    var oBox=document.getElementById('box');
    var R=4;
    var C=7; 
   for(var r=0; r<R; r++){
        for(var c=0; c<C; c++){
            var oSpan=document.createElement('span');
            var w=oBox.offsetWidth/C;
            var h=oBox.offsetHeight/R;
            oSpan.style.width=w+'px';
            oSpan.style.height=h+'px';
            oSpan.style.left=w*c+'px';
            oSpan.style.top=h*r+'px';
            oSpan.innerHTML='<em class="front"></em><em class="back"></em>';
            oBox.appendChild(oSpan); 
           //添加兩個自定義屬性,用于添加延遲效果
            oSpan.c=c;
            oSpan.r=r;
            oSpan.children[0].style.backgroundPosition=(-oSpan.offsetLeft)+'px '+(-oSpan.offsetTop)+'px';
            oSpan.children[1].style.backgroundPosition=(-oSpan.offsetLeft)+'px '+(-oSpan.offsetTop)+'px';
        }
    }
    var iNow=0;
    var aSpan=oBox.children;
    var bReady=true;
    //點擊事件
    document.addEventListener('click',function(){
        //加個開關,以防點太快跳圖
        if(bReady==false){
            return;
        }
        bReady=false;
        iNow++;
        for(var i=0;i<aSpan.length;i++){
            //需要一個延遲才能有從左上到右下的翻頁效果
            aSpan[i].style.transition='1s all ease '+200*(aSpan[i].r+aSpan[i].c)+'ms';
            aSpan[i].style.transform='perspective(800px) rotateY(180deg)';        }
    },false);
    //運動結束觸發事件
    aSpan[aSpan.length-1].addEventListener('transitionend',function(){
        //瞬間拉回 換圖
        for(var i=0;i<aSpan.length;i++){
            aSpan[i].style.transition='none';
            aSpan[i].style.transform='perspective(800px) rotateY(0deg)';                                 aSpan[i].children[0].style.backgroundImage='url("img/'+iNow%3+'.jpg")';
            aSpan[i].children[1].style.backgroundImage='url("img/'+((iNow+1)%3)+'.jpg")';
        }
        bReady=true;
    },false);
},false);
效果圖:
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,786評論 1 92
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,814評論 25 708
  • 本文主要是起筆記的作用,內容來自慕課網. 認識CSS樣式 CSS全稱為“層疊樣式表 (Cascading Styl...
    0o凍僵的企鵝o0閱讀 2,661評論 0 30
  • 短書集微信公眾號ID:duanshu300 解說詞:科比說:“你見過凌晨四點的紐約街道嗎?我見過每天四點凌晨的紐約...
    Andylee閱讀 1,132評論 0 3
  • 今天寫這個是因為后臺有粉絲問我她和她男朋友分手了,這幾個月過得很痛苦,問我該不該復合。 我問她你自己怎么想呢? 不...
    小美蛋在路上閱讀 247評論 0 0