前几周,舍友给了我一个小小的制作网页中的小一部分,就是一个具有翻页功能表格。就像第一行就是导航,当点击其中一个键的时候,下面的内容也会改变。

思路分析:注意四个地方,一:点击按键的时候,背景颜色会发生变化;二:那个小圆球的颜色也会发生变化;三:下面那个面板也会发生变化(以tab1,tab2,tab3,tab4来区别);四:点击的按键会出现跟下面面板颜色一样的边框,但有不是四个边框都出现,而是出现其中一部分。所以,当发生点击事件的时候,要同时控制三个方面的改变,分别用三个函数来控制即可。首先用CSS把大概的模型做出来。然后再用JAVASCRIPT控制点击事件的发生。

下面先看HTML代码:<body>
<div  class="path">
<div class="path1">
<ul class="tabtitle">       //列表表示上面的导航
<li class="tab"><a href="#" class="tablink" id="link1"><img  src="pointIcon.png"  id="tab1img"  alt="tab1"/>tab1</a>
<li class="tab"><a href="#" class="tablink" id="link2"><img  src="pointIcon.png"  id="tab2img"  alt="tab2"/>tab2</a>
<li class="tab"><a href="#" class="tablink" id="link3"><img  src="pointIcon.png"  id="tab3img"  alt="tab3"/>tab3</a>
<li class="tab"><a href="#" class="tablink" id="link4"><img  src="pointIcon.png"  id="tab4img"  alt="tab4"/>tab4</a>
</ul>
</div>
<div class="tabtable" id="link1_1">    //下面的面板
<p>tab1</p>
</div>
<div class="tabtable" id="link2_1">
<p>tab2</p>
</div>
<div class="tabtable" id="link3_1">
<p>tab3</p>
</div>
<div class="tabtable" id="link4_1">
<p>tab4</p>
</div>
</div>
</body>

再看CSS代码:<style type="text/css">
.path{  margin:0 auto;         //当宽度确定之后,这样的设置就是窗口置在中间的了     
       width:700px;
       position:relative;         //相对定位,为子元素的绝对定位服务
    }
#link1_1{position:absolute;   
          top:24px;               
    left:0px;                                    //以相对定位的PASH类为母版,相对于母版向左偏移多少像素
    width:595px;
    height:244px;
    background-color:#d8d8b4;
    z-index:0;                              //Z-INDEX属性,数字大就放在上面,小的就放在下面,有覆盖的可能。
    }
#link2_1{position:absolute;
          top:24px;
    left:0px;
    width:595px;
    height:244px;
    background-color:#d8d8b4;
    z-index:-1;}   
#link3_1{position:absolute;
          top:24px;
    left:0px;
    width:595px;
    height:244px;
    background-color:#d8d8b4;
    z-index:-2;}
#link4_1{position:absolute;
          top:24px;
    left:0px;
    width:595px;
    height:244px;
    background-color:#d8d8b4;
    z-index:-3;}     
.tab{display:inline; 
     }
.tablink{ text-decoration:none;
          padding:3px 51px;
    background-color:#3879d9;
    color:white;
  }
#link1{position:absolute;
       left:0px;}
#link2{position:absolute;
        left:148px;}
#link3{position:absolute;
        left:296px;}
#link4{position:absolute;
        left:444px;}    
.tablink img{border-style:none;
             margin:0px 3px 0px 0px;}
</style>

注意:上面那个解析代码的,要运行的时候要删去。

再看看js的代码:

function initAll(){  for(var i=0;i<document.links.length;i++){      //快速扫描画布内所以带有标签<a>的对象      

var linkobj=document.links[i];            

   setupRollover(linkobj);    }  }

function setupRollover(thislink){     thislink.onclick=rollclick;      //点击“点击”的事件      }

 function rollclick(){      var clickImage=this.firstChild;    //第一个子结点是图像

 clickImage.outImage=new Image;     //给图像对象添加一个图像属性,该属性是图像,也是图像对象  

clickImage.outImage.src="chosenPointIcon.png";   // 把图像先缓冲到内存中

 clickImage.src=clickImage.outImage.src;  changBack(this);      //  改变图标函数

 changetab(this);           //改变tab内容函数  

changebackgroundcolor(this);    //改变背景颜色函数  

changborder(this);          //改变边框函数  }

 function changborder(thislink){        var borderArray=document.getElementsByTagName('A');  //把带有标签<a>的元素放在数组中    

var cuu=thislink.id;               

   for(var i=0;i<borderArray.length;i++){       

  if(borderArray[i].className=="tablink"&&borderArray[i].id!=thislink.id){  //判断没有被点击的情况下,边框怎么表现 

            borderArray[i].style.borderStyle="none none none none";                   //class ,id,在这里起到了作用         }      }        

   if(cuu=="link1"){          //被点击的对象(最左边)的边框是什么表现      

  thislink.style.borderStyle=" solid none none solid";               

   thislink.style.borderWidth="1px";              

  thislink.style.borderColor="#d8d8b4";     }  

 else             if(cuu=="link4"){              //最右边的       thislink.style.borderStyle=" solid solid none none";         

         thislink.style.borderWidth="1px";           

     thislink.style.borderColor="#d8d8b4";    }       

   else{                             //中间的       thislink.style.borderStyle=" solid none none none";        

      thislink.style.borderWidth="1px";             thislink.style.borderColor="#d8d8b4";      }            }           

 function changebackgroundcolor(thislink){         //改变背景颜色      

var backgroundcolorArray=document.getElementsByTagName('A');    //跟上面的方面几乎一样!!  

  var duu=thislink.id;

   for(var i=0;i<backgroundcolorArray.length;i++){      

  if(backgroundcolorArray[i].className==thislink.className&&backgroundcolorArray[i].id!=thislink.id)  

             {backgroundcolorArray[i].style.backgroundColor="#3879d9";    

   backgroundcolorArray[i].style.color="white";       }          

else             

   {backgroundcolorArray[i].style.backgroundColor="#eeffdd";      

           backgroundcolorArray[i].style.color="#3879d9";}        }  } 

   function changBack(thislink){  

var tee=thislink.id;    

var linkArray=document.getElementsByTagName('A');

    for(var i=0;i<linkArray.length;i++){      

    if(linkArray[i].className==thislink.className&&linkArray[i].id!=thislink.id){    

       rollout(linkArray[i]);       }     }    }  

  function rollout(thislink){     

  var overImage=thislink.firstChild;  

  overImage.src="PointIcon.png";   }

 function changetab(thislink){     

  var twolink=thislink.id+'_1';     

var divArray=document.getElementsByTagName('div');

  for(var i=0;i<divArray.length;i++){       

if(divArray[i].className=='tabtable'&&divArray[i].id!=twolink){    

    overroll(divArray[i]);     }      

document.getElementById(twolink).style.zIndex="0";       }      }

function overroll(thisdiv){         thisdiv.style.zIndex="-1"; }   

 initAll();

</script> 

小结:第一次用JS,还不知道怎么去优化,只是把自己想到的办法,设法去完成它就算了,这种也是很简单想得到的,但又有点罗嗦的感觉。其中核心就是修改元素的STYLE属性,让跟其他的不同。同样在这个基础上,也可以添加很多的功能,例如:加上个onmouse,mouseout事件,面板上面也可以添加很多东西。ID跟CLASS利用得合理的话,也会有起到很大的作用。例如:ID,CLASS的名字,是修改STYLE属性的路径之一。当扫描画布中的带有标签<a>的元素是,同样也可以扫描带有<img>标签的元素,找出a元素,貌似是一样的,但显示的结果是不同的。用第一中方法的时候,你只要点击那个按键,颜色就会发生变化,用第二种方法的时候,要点击到那个小圆球颜色才发生变化。

今天又弄了一下,加了一点东西进去: