jQuery实现图片卡片层叠式切换效果
本功能的开发,主要看到一个网站有这个功能,但是是flash做的,当时就吐血了,于是就自己研究用jquery来做一下,功能比较简单,没用进行美化,代码没有经过优化的,如果哪位高手可以优化修改下也不错!
好吧,废话就到这里!
模仿网站的地址:www.web-designers.cn(韩雪冬)
再做完这个效果
在一个模板网站找到个类似的功能
http://demo.cssmoban.com/cssthemes/hmtl5-template/index.html
非常之不错,很酷!
先上个图吧!
效果:
这个切换效果是最基本的,就3个图片切换
1.一个框架,主要用来存放切换图片层
2.3个div层,用来做切换层,当然,也可以做大于3个以上的
原理:先把3个层的div分别布局好,就像现在这个图片一样。首页,我们分别给3个层添加一个标识,用来区分3个对象层的,主要是用来切换的时候判断是哪个对象在什么位置,
再对他们进行切换!
先放一下他们的CSS布局样式:
body{ margin:0;} /*主框架*/ .out_warp{ position:relative; width:860px; height:400px; background:#ccc; margin: 100px auto 0 auto;z-index:-99;} /*左边层*/ .left{width:520px; height:260px; background:#F63;position:absolute; top:70px;left:0; z-index:0;} /*中间层*/ .cont{width:680px; height:340px; max-height:340px; max-width:680px; background:#096; position:absolute;top:30px;left:90px; z-index:1;} /*右边层*/ .right{width:520px; height:260px; background:#939;position:absolute;top:70px;left:340px; z-index:0;}
再放html代码:
<div id="out_warp" class="out_warp"> <div id="left" class="left" flat=""></div> <div id="cont" class="cont" flat=""></div> <div id="right" class="right" flat=""></div> </div> <div class="button"><input type="button" value="左" id="button_left"/> <input type="button" value="右" id="button_right"/> <input type="button" value="信息" id="button2" onclick="one();"/> </div>
jq操作代码:
$(function(){ init();//初始化 //首次为他们标识,为了切换做好准备 function init(){ $('.right').attr('flat', 'right'); $('.left').attr('flat', 'left'); $('.cont').attr('flat', 'cont'); } ; //看他们的标识的状态 $("#button2").click(function(){ alert('left:'+$('.left').attr('flat')+' cont:'+$('.cont').attr('flat')+' right:'+$('.right').attr('flat')); }); //记录移动对象,用于区分 var left_move; //记录左边的对象 var cont_move; //记录中间的对象 var right_move; //记录右边的对象 var flat; //判断按了左或是右 /// /切换动画后,修改flat标识,该赋值方式为向左转 var to_left=function(){ left_move.attr('flat', 'right');//左图层变成右 cont_move.attr('flat', 'left');//中间边左边 right_move.attr('flat', 'cont');//右边边中间 }; //向右转 var to_right=function(){ left_move.attr('flat', 'cont');//左图层变成右 cont_move.attr('flat', 'right');//中间边左边 right_move.attr('flat', 'left');//右边边中间 }; //判定当前的图层块,并做对应的操作 function left_obj(){ left_move=$("[flat=left]");//取得左边对象,进行记录 //以下为切换效果,到底是向哪个方向,就需要判断按了是哪个按钮 if(flat=="left"){ left_move.animate({ left:"340px", //向最右边切换 width: "520px", height: "260px" }, 10 );//10,以最快的速度变换位置 left_move.css("z-index","0"); }else if(flat=="right"){ left_move.animate({ //向最中间切换 left:"90px", top:"30px", width: "680px", height: "340px" }, 150 ); left_move.css("z-index","1"); } }//end_left_obj function right_obj(){ right_move=$("[flat=right]"); //取得最右边对象 if(flat=="left"){ right_move.animate({ left:"90px", //向中间切换 top:"30px", width: "680px", height: "340px" }, 150 ); right_move.css("z-index","1"); //最高层 }else if(flat=="right"){ right_move.animate({ left:"0", //向最左边切换 top:"70px", width: "520px", height: "260px" }, 10 ); //10,以最快的速度变换位置 right_move.css("z-index","0"); } }//end_right_obj function cont_obj(){ cont_move=$("[flat=cont]"); if(flat=="left"){ cont_move.animate({ //向最左边切换 left:"0", top:"70px", width: "520px", height: "260px" }, 100 ); }else if(flat=="right"){ cont_move.animate({ //向最右边切换 left:"340px", top:"70px", width: "520px", height: "260px" }, 100 ); } cont_move.css("z-index","0"); }//end_cont_obj //点击向左切换 $("#button_left").click(function(){ flat="left"; left_obj(); right_obj(); cont_obj(); to_left(); //修改标识 }) //点击向右切换 $("#button_right").click(function(){ flat="right"; left_obj(); right_obj(); cont_obj(); to_right(); //修改标识 }) });//end_function
当然,我们也可以重新修改最外层的框架以及切换层的高度和宽度,还可以对它们进行美工,做得更加漂亮,效果就更好了!如果采用CSS3进行设计就非常好,可以忽略ie
完整代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>123</title> <style> body{ margin:0;} .out_warp{ position:relative; width:860px; height:400px; background:#ccc; margin: 100px auto 0 auto;z-index:-99;} .left{width:520px; height:260px; background:#F63;position:absolute; top:70px;left:0; z-index:0;} .cont{width:680px; height:340px; max-height:340px; max-width:680px; background:#096; position:absolute;top:30px;left:90px; z-index:1;} .right{width:520px; height:260px; background:#939;position:absolute;top:70px;left:340px; z-index:0;} img{ width:100%; height:100%;}/*自适应div高、宽*/ </style> <script type="text/javascript" src="jquery-1.7.2.min.js"></script> </head> <body> <div id="out_warp" class="out_warp"> <div id="left" class="left" flat=""><img src="1.jpg"/></div> <div id="cont" class="cont" flat=""><img src="2.jpg"/></div> <div id="right" class="right" flat=""><img src="3.jpg"/></div> </div> <div class="button"><input type="button" value="左" id="button_left"/> <input type="button" value="右" id="button_right"/> <input type="button" value="信息" id="button2" onclick="one();"/> </div> <script type="text/javascript" language="javascript"> $(function(){ init();//初始化 function init(){ $('.right').attr('flat', 'right'); $('.left').attr('flat', 'left'); $('.cont').attr('flat', 'cont'); } ; $("#button2").click(function(){ alert('left:'+$('.left').attr('flat')+' cont:'+$('.cont').attr('flat')+' right:'+$('.right').attr('flat')); }); //记录移动对象,用于区分 var left_move; //记录左边的对象 var cont_move; //记录中间的对象 var right_move; //记录右边的对象 var flat; //判断按了左或是右 /// /切换动画后,修改flat标识,该赋值方式为向左转 var to_left=function(){ left_move.attr('flat', 'right');//左图层变成右 cont_move.attr('flat', 'left');//中间边左边 right_move.attr('flat', 'cont');//右边边中间 }; //向右转 var to_right=function(){ left_move.attr('flat', 'cont');//左图层变成右 cont_move.attr('flat', 'right');//中间边左边 right_move.attr('flat', 'left');//右边边中间 }; // //判定当前的图层块,并做对应的操作 function left_obj(){ left_move=$("[flat=left]");//取得左边对象,进行记录 if(flat=="left"){ left_move.animate({ left:"340px",//最右边的左边 width: "520px", height: "260px", }, 10 );//10,以最快的速度变换位置 left_move.css("z-index","0"); }else if(flat=="right"){ left_move.animate({ left:"90px",//中间 top:"30px", width: "680px", height: "340px", }, 150 ); left_move.css("z-index","11"); } }//end left function right_obj(){ right_move=$("[flat=right]"); if(flat=="left"){ right_move.animate({ left:"90px", /*中间*/ top:"30px", width: "680px", height: "340px", }, 150 ); right_move.css("z-index","1"); //最高层 }else if(flat=="right"){ right_move.animate({ left:"0",//最左边对象位置 top:"70px", width: "520px", height: "260px", }, 10 );//10,以最快的速度变换位置 right_move.css("z-index","0"); } }//end right function cont_obj(){ cont_move=$("[flat=cont]"); if(flat=="left"){ cont_move.animate({ left:"0", top:"70px", width: "520px", height: "260px", }, 100 ); }else if(flat=="right"){ cont_move.animate({ left:"340px", top:"70px", width: "520px", height: "260px", }, 100 ); } cont_move.css("z-index","0"); } $("#button_left").click(function(){ flat="left"; left_obj(); right_obj(); cont_obj(); to_left(); }) $("#button_right").click(function(){ flat="right"; left_obj(); right_obj(); cont_obj(); to_right(); }) }); </script> </body> </html>
文章就写到这里,本人是个新手,如有哪里写不好或错漏,欢迎指点!!!