我想说jQuery写这样的例子不难吧,于是就尝试着写一下.»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
先看Html:»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
HTML 代码»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
<div id="photoShow">»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
<div class="photo">»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<img src="p1.jpg"/>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<span>张娜拉,韩国的</span>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
</div>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
<div class="photo">»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<img src="p2.jpg"/>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<span>My Digital Story</span>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
</div>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
<div class="photo">»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<img src="p3.jpg"/>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<span>不知道是什么图来的</span>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
</div>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
<div class="photo">»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<img src="p4.jpg"/>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<span>我的Logo,Studio拼错了都不知道,汗一个。</span>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
</div>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
<div class="photo">»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<img src="p5.jpg"/>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
       
<span>四季图吧这是,但我分不清夏和秋</span>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
</div>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
   
</div>»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
</div>
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
然后我们写一个CSS来控制一下这个HTML的样式,CSS比较菜,将就吧,达到效果就好:»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
CSS»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
#photoShow{}{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    border
: solid 1px #C5E88E;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    overflow
: hidden;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
/**//*图片超出DIV的部分不显示*/»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    width
: 580px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    height
: 169px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    background
: #C5E88E;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    position
: absolute;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
}»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
.photo
{}{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    position
: absolute;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    top
: 0px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    width
: 490px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    height
: 169px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
}»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
.photo img
{}{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    width
: 490px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    height
: 169px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
}»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
.photo span
{}{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    padding
: 5px 0px 0px 5px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    width
: 490px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    height
: 30px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    position
: absolute;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    left
: 0px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    bottom
: -32px;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
/**//*介绍内容开始的时候不显示*/»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    background
: black;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    filter
: alpha(opacity=50);»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
/**//*IE透明*/»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    opacity
: 0.5;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
/**//*FF透明*/»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
    color
: #FFFFFF;»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
}
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
完成上面的准备工作后,我们下面开始jQuery代码。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
首先就是做一些初始化的工作:»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
$(document).ready(function()»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var imgDivs = $("#photoShow>div");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var imgNums = imgDivs.length; //图片数量»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var divWidth = parseInt($("#photoShow").css("width")); //显示宽度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var imgWidth = parseInt($(".photo>img").css("width")); //图片宽度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var minWidth = (divWidth - imgWidth)/(imgNums-1); //显示其中一张图片时其他图片的显示宽度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var spanHeight = parseInt($("#photoShow>.photo:first>span").css("height")); //图片介绍信息的高度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        imgDivs.each(function(i){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                $(imgDivs).css({"z-index": i, "left": i*(divWidth/imgNums)});»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                $(imgDivs).hover(function(){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        //处理鼠标进入的时候»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                },function(){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        //处理鼠标离开的时候»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
});»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
首先我们定义了一些变量,方便我们后面使用。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
然后就是使用了一个 each() 的函数在每一个匹配的元素进行事件处理。这里是每一个<div class="photo"> 元素分别进行事件的处理。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
然后看一下下面这一句:
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
$(imgDivs).css({"z-index": i, "left": i*(divWidth/imgNums), "top":"0px"});»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
这句是通过CSS来控制每一个图片的层次和显示位置。然后就是用一个 hover() 函数来处理鼠标的hover事件。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
首先看一下鼠标进入图片的时候该怎么处理:
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
$(imgDivs).hover(function()»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        //$(this).find("img").css("opacity","1");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        $(this).find("span").stop().animate({bottom: 0}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        imgDivs.each(function(j){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                if(j<=i){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        $(imgDivs[j]).stop().animate({left: j*minWidth}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                }else{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        $(imgDivs[j]).stop().animate({left: (j-1)*minWidth+imgWidth}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                }»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
},»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
function(){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        //处理鼠标离开时候的事件});»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
在这里所有的动画效果都是通过 animate() 函数修改CSS来控制元素的显示位置来实现的。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
这里注意一下就是在调用 animate() 函数前都调用了 stop() 函数。stop() 函数是用来停止当前元素的所有执行中的事件。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
j<=i 的判断就是判断鼠标hover的当前图片和该图片前面的图片该图片后面的图片的分割线。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
鼠标离开的处理也差不多,下面之完整的代码:$(document).ready(function(){        var imgDivs = $("#photoShow>div");
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var imgNums = imgDivs.length; //图片数量»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var divWidth = parseInt($("#photoShow").css("width")); //显示宽度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var imgWidth = parseInt($(".photo>img").css("width")); //图片宽度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var minWidth = (divWidth - imgWidth)/(imgNums-1); //显示其中一张图片时其他图片的显示宽度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        var spanHeight = parseInt($("#photoShow>.photo:first>span").css("height")); //图片介绍信息的高度»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        imgDivs.each(function(i){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                $(imgDivs).css({"z-index": i, "left": i*(divWidth/imgNums)});»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                $(imgDivs).hover(function(){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        //$(this).find("img").css("opacity","1");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        $(this).find("span").stop().animate({bottom: 0}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        imgDivs.each(function(j){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                if(j<=i){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                        $(imgDivs[j]).stop().animate({left: j*minWidth}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                }else{»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                        $(imgDivs[j]).stop().animate({left: (j-1)*minWidth+imgWidth}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                }»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                },function(){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        imgDivs.each(function(k){»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                //$(this).find("img").css("opacity","0.7");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                $(this).find("span").stop().animate({bottom: -spanHeight}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                                $(imgDivs[k]).stop().animate({left: k*(divWidth/imgNums)}, "slow");»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                        });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
                });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
        });»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
});»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
本人水平一般,代码还有待改善。»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
自己觉得吧用JS来写这种效果不大实际,因为占用的CPU比较高,还是用Flash实现的好。偶写这个完全是为了学习.»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|
或者哪位大大用silverlight也写个这样的效果的教程给偶学习下silverlight。
»êf Êc …¡!www.netcsharp.cn¸’].¬<û:|