今年4月,我在宿舍憋出一個拖曳翻頁效果
原本是為自己的部落格網站設計的,週二產生的靈感,週三週四逃課兩天算座標,週五回家,到傍晚才算寫出了第一版,發布之後沒想到評價還不錯,此後太多人問我這個效果該怎麼修改,才能用到自己的網站上,所以現在發這篇文章詳細解釋一下這個效果的原理
在此正式將此效果命名為ThrowPage ,而且我肯定會繼續完善這個效果,並發布封裝好的代碼,方便大家調用,可能一個月後,也可能一年後,In Me God Trust
本文將以結構層、表現層、行為層三層分開的順序來寫:
運行程式碼框
<html>
<head>
<title>ThrowPage</title>
<style type="text/css">
html,body{
width:100%;
height:100%;
border:0px;
margin:0px;
overflow:hidden;
}
#menu{
width:1000px;
height:500px;
overflow:hidden;
background:lightblue;
}
.page{
position:absolute;
width:300px;
height:400px;
left:350px;
top:50px;
background:#FFF;
border:1px solid #999;
}
ul{
list-style:none;
height:320px;
margin:20px;
padding:0px;
background:#EEE;
}
li{
font-size:12px;
height:20px;
line-height:20px;
border-bottom:1px dashed #999;
}
li span{
float:right;
}
li a{
color:#000;
text-decoration:none;
}
li a:hover{
text-decoration:underline;
}
.tip{
display:block;
height:20px;
margin:0px 20px;
line-height:20px;
text-align:center;
font-size:12px;
background:#999;
}
</style>
</head>
<body>
<script type="text/javascript">
function id(obj){
return document.getElementById(obj);
}
var page;
var mx;
var md=false;
var sh=0;
var en=false;
window.onload=function(){
page=id("menu").getElementsByTagName("div");
if(page.length>0){
頁[0].style.zIndex=2;
}
for(i=0;i<page.length;i++){
page[i].innerHTML+="<span class="tip">"+(i+1)+"/"+page.length+"頁拖曳翻頁</span>";
page[i].id="page"+i;
page[i].i=i;
page[i].onmousedown=function(e){
if(!en){
if(!e){e=e||window.event;}
ex=e.pageX?e.pageX:ex;
mx=350-ex;
this.style.cursor="move";
md=true;
if(document.all){
this.setCapture();
}else{
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}
}
}
page[i].onmousemove=function(e){
if(md){
en=true;
if(!e){e=e||window.event;}
ex=e.pageX?e.pageX:ex;
this.style.left=ex+mx+"px";
if(this.offsetLeft<350){
var cu=(this.i==0)?page.length-1:this.i-1;
page[sh].style.zIndex=0;
page[cu].style.zIndex=1;
this.style.zIndex=2;
sh=cu;
}
if(this.offsetLeft>350){
var cu=(this.i==page.length-1)?0:this.i+1;
page[sh].style.zIndex=0;
page[cu].style.zIndex=1;
this.style.zIndex=2;
sh=cu;
}
}
}
page[i].onmouseup=function(){
this.style.cursor="default";
md=false;
if(this.offsetLeft==350){
en=false;
}
if(document.all){
this.releaseCapture();
}else{
window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}
flyout(this);
}
}
}
function flyout(obj){
if(obj.offsetLeft < 350){
if( (obj.offsetLeft - 10) > 50 ){
obj.style.left=obj.offsetLeft - 10 + "px";
window.setTimeout("flyout(id('"+obj.id+"'));",0);
}else{
obj.style.left= 50 +"px";
obj.style.zIndex=0;
flyin(id(obj.id));
}
}
if(obj.offsetLeft > 350){
if((obj.offsetLeft + 10) < 650){
obj.style.left=obj.offsetLeft + 10 + "px";
window.setTimeout("flyout(id('"+obj.id+"'));",0);
}else{
obj.style.left= 650 + "px";
obj.style.zIndex=0;
flyin(id(obj.id));
}
}
}
function flyin(obj){
if(obj.offsetLeft<350){
if((obj.offsetLeft + 10) < 350){
obj.style.left=obj.offsetLeft + 10+"px";
window.setTimeout("flyin(id('"+obj.id+"'));",0);
}else{
obj.style.left= 350 +"px";
en=false;
}
}
if(obj.offsetLeft>350){
if((obj.offsetLeft - 10) > 350){
obj.style.left=obj.offsetLeft - 10 +"px";
window.setTimeout("flyin(id('"+obj.id+"'));",0);
}else{
obj.style.left=350+"px";
en=false;
}
}
}
</script>
<div id="menu">
<div class="page">
<ul>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">伴侶</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">美麗島</a></li>
<li style="background:coral;"><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">舞孃</a>< /li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">手牽手</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">初戀的少年家</a></li>
</ul>
</div>
<div class="page">
<ul>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">啊!停不住的愛人</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">網路</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">傾城之雨</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">往事2000</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">綠色恐怖分子</a></li>
</ul>
</div>
<div class="page">
<ul>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">時光慢慢消失</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">寧靜溫泉</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">變天著花</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">阿輝飼了一隻狗</a></li >
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">真的假的</a></li>
<li><span>09-11-25</span> <a href=" http://www.oern.cn " target="_blank">南台灣仔共</a></li>
</ul>
</div>
</div>
</body>
</html>
[Ctrl+A 全部選擇提示:你可先修改部分程式碼,再按執行]
結構層
要把一個目錄的內容按頁展開,該怎麼寫呢?也許是這樣,至少我就是這麼寫的
<div id="menu">
<div class="page">
<ul>
<li><span>09-11-25</span><a>戀曲1980</a></li>
<li><span>09-11-25</span><a>戀曲1990</a></li>
<li><span>09-11-25</span><a>戀曲2000</a></li>
<li><span>09-11-25</span><a>母親</a></li>
</ul>
<span class="tip">1/2頁拖曳翻頁</span>
</div>
<div class="page">
<ul>
<li><span>09-11-25</span><a>伴侶</a></li>
<li><span>09-11-25</span><a>思念</a></li>
<li><span>09-11-25</span><a>童年</a></li>
<li><span>09-11-25</span><a>牧童</a></li>
</ul>
<span class="tip">2/2頁拖曳翻頁</span>
</div>
</div>
<ul> 是每一頁的列表,圖中的淺灰色色部分
<li> 是清單中的一條,圖中珊瑚色的部分
<span class="tip"> 是不應該出現在xhtml 中的,應該由js 添加,它是每一頁下面的索引標識,圖中的深灰色部分
<div class="page"> 是目錄中的頁,圖中的白色部分
<div id="menu"> 是包含了所有頁的目錄,圖中的亮藍色部分。當然,如果頁面中除了這個效果外沒有其他東西的話,這個標籤也可以不寫,那麼所有<div class="page"> 的父標籤就是<body>
或許你會說,目錄也應該是<ul>,所以應該這麼寫
<ul id="menu">
<li class="page">
<ul>
<li><span>09-11-25</span><a>戀曲1980</a></li>
<li><span>09-11-25</span><a>戀曲1990</a></li>
<li><span>09-11-25</span><a>戀曲2000</a></li>
<li><span>09-11-25</span><a>母親</a></li>
</ul>
<span class="tip">1/2頁拖曳翻頁</span>
</li>
<ul class="page">
<ul>
<li><span>09-11-25</span><a>伴侶</a></li>
<li><span>09-11-25</span><a>思念</a></li>
<li><span>09-11-25</span><a>童年</a></li>
<li><span>09-11-25</span><a>牧童</a></li>
</ul>
<span class="tip">2/2頁拖曳翻頁</span>
</li>
</li>
這樣確實比較符合語意,不過問題馬上就來了