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

来源:互联网 发布:人工智能对设计的影响 编辑:程序博客网 时间:2024/06/03 05:25

上一篇文章,我从教程中学到了使用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();
复制代码

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