使用css3中transition的页面切换(继续创新版)

上一篇文章,我从教程中学到了使用css3中transition的页面切换,而这次呢,我就稍微使用这个方法稍做一些少少改动,我的想法是将所有层都叠在一起,一个一个从下往上翻。然后接着这个思路我又想到如果翻完的话怎么办?我就弄多了一个可以重新来过的按钮。最后总觉得美中不足,只有向下一页的翻动,如果想返回上一页的话,还要重新来过,为此我又新增加多一个按钮,按钮的动画我还是选择了Javascript来控制。

      首先看看效果图

     demo地址:http://zhuyingyan.github.com/myfavourite/update.html

这里我还弄的比较简单,还没有加上内容。

首先是html,

?
< div  id = "mylife" >
             < ul >
                 <!-- page top -->
                 < li  id = "pageFour"  class = "panel" >
                     < div  class = "content" >
                         < h2 >page Four</ h2 >
                         < p >Some content  ssss</ p >
                     </ div >
                 </ li >
                 < li  id = "pageThree"  class = "panel" >
                     < div  class = "content" >
                         < h2 >Page Three</ h2 >
                         < p >Some content  ssss</ p >
                     </ div >
                 </ li >
                 < li  id = "pageTwo"  class = "panel" >
                     < div  class = "content" >
                         < h2 >Page Two</ h2 >
                         < p >Some content  ssss</ p >
                     </ div >
                 </ li >
                 
                 < li  id = "pageOne"  class = "panel" >
                     < div  class = "content" >
                         < h2 >Page one</ h2 >
                         < p >Some content  ssss</ p >
                     </ div >
                 </ li >
                 < li  id = "pageTop"  class = "panel" >
                     < div  class = "content" >
                         < p  class = "c-special" >to my favourite person:</ p >
                         < h2 >Roger Federer</ h2 >
                         < p >Some content  ssss</ p >
                     </ div >
                 </ li >            
             </ ul >
         </ div >
         < div  id = "header" >
             < ul  id = "navigation" >
                 < li >< a  id = "perviousPage"  href = "#" >pervious page</ a ></ li >
                 < li >< a  id = "nextPage"  href = "#" >next page</ a ></ li >
                 < li >< a  id = "again"  href = "#" >again</ a ></ li >
                 
             </ ul >
         </ div >

      我把原本的内容页的div结构,改成ul,li结构。不过这里有点不太合理的地方就是我把页数在html中反过来写了,就是说我最后一页的div层放在第一个li里面。这个往后再做修改,这也关联到javascript的修改。

      接着是css代码,跟之前的css并没有太大改动,主要是按钮的位置做了调整,还有使用javascript增加class的class定义。

复制代码
.panelclick{
    margin-top:-150%;
    background:#fff;
    -webkit-transition:all 1.8s ease-in-out;
    -moz-transition:all 1.8s ease-in-out;
    -o-transition:all 1.8s ease-in-out;
    -ms-transition:all 1.8s ease-in-out;
    transition:all 1.8s ease-in-out;
}
#navigation .linkClick{
    background:#000;
    color:#fff;
}
复制代码

  最后是javascript代码:

复制代码
var pageChange = (function(){
            /**
            * listClickID 取得放着全部页面的ID号
            * tagName     每个页面放于的标签
            * i           这个比较重要是当前第i个页面,从0开始到length-1
            * length      页面的个数
            * nextPageId  下一页按钮的ID号
            * again       重新来过按钮的ID号
            * perviousPage上一页按钮的ID号
            * 
            *  
            */
            var listClickID,tagName,nextPageId,againId,perviousPageId;   
            var listClick=document.getElementById(listClickID||"mylife").getElementsByTagName(tagName||"li");
            var i=0,length=listClick.length;
            var nextPage=document.getElementById(nextPageId||"nextPage");
            var again=document.getElementById(againId||"again");
            var perviousPage=document.getElementById(perviousPageId||"perviousPage");
            /**
            * init        获取下一页并加上className实现动画效果
            */
            var init=function(){                            
                            
                            var id=this.id;
                            if(i>=length){
                                return false;
                            }
                            var block=listClick[length-i-1];
                            i++;
                            
                            block.style.MozTransitionDelay="0s";
                            block.style.WebkitTransitionDelay="0s";
                            if(block.className.indexOf("panelclick")==-1)
                                block.className+=" panelclick";                    
            };
            /**
            * restart       页面都从上往下回来,而且是有层次的一个接着一个,这里我就用了延时
            */
            var restart=function(){
                    i=0;
                    var j=0;
                    for(;i < length;i++){
                        var block=listClick[i];
                        console.log(block);
                        if(block.className.indexOf("panelclick")!=-1)
                            {
                                block.className=block.className.replace(" panelclick","");
                                block.style.MozTransitionDelay=j+"s";
                                block.style.WebkitTransitionDelay=j+"s";
                                j++;
                            }
                    }
                    j=0;
                    i=0;
            };
            /**
            * previous        获取上一页并删去className实现动画效果
            */
            var previous=function(){                    
                        if((length-i)>length-1){
                            return false;
                        }
                        var block=listClick[length-i];
                        console.log(block);
                        if(block.className.indexOf("panelclick")!=-1)
                        {
                            block.className=block.className.replace(" panelclick","");
                            block.style.MozTransitionDelay="0s";
                            block.style.WebkitTransitionDelay="0s";
                        }
                        i=i-1;                    
            };
            return {
                setListClick:function(listID){
                    listClickID=listID;
                    return this;
                },
                setTagName:function(tagname){
                    tagName=tagname;
                    return this;
                },
                setNextPageId:function(nid){
                    nextPageId=nid;
                    return this;
                },
                setAgainId:function(aid){
                    againId=aid;
                    return this;
                },
                setPerviousPageId:function(pid){
                    perviousPageId=pid;
                    return this;
                },
                /**
                * 加入事件绑定,实现相关键盘,鼠标点击效果
                */
                mouseEvent:function(){
                    var body=document.getElementsByTagName("body")[0];
                    var that=this;
                    body.addEventListener("keydown",function(event){
                        console.log(event.keyCode);
                        if(event.keyCode==37){
                            previous();
                        }
                        else if(event.keyCode==39){
                            init();
                        }
                    });
                    perviousPage.addEventListener("click",function(event){
                        previous();
                    });
                    nextPage.addEventListener("click",function(event){
                        init();
                    });
                    again.addEventListener("click",function(event){
                        restart();
                    });
                    return this;
                }
            }
        }(pageChange || {}));
        pageChange.mouseEvent();
复制代码

    最后,小小的总结,由于思路有限,先是写这么多,之后希望能够努力拓展拓展,完善其中的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值