首页 > 语言 > JavaScript > 正文

基于jquery实现左右按钮点击的图片切换效果

2024-05-06 16:25:03
字体:
来源:转载
供稿:网友

这篇文章主要介绍了基于jquery实现左右按钮点击的图片切换效果,内容讲解很丰富,感兴趣的小伙伴们可以参考一下

jQuery可以制作出与Flash媲美的动画效果,这点绝对毋庸置疑,本文将通过实例演示一个左右按钮点击的图片切换效果。

一、最终效果

基于jquery实现左右按钮点击的图片切换效果

二、功能分析

1、需求分析

点击左边pre按钮,显示前面三个图片,点击右边的next按钮,显示后面的一组(三个)图片。初始化只显示next按钮,到最后一组只显示pre按钮,中间过程两按钮都显示。

2、html结构分析

 

 
  1. <div class="activity" id="activity-slide"
  2. <a href="javascript:void(0)" class="pg_left ps_pre"></a> 
  3. <a href="javascript:void(0)" class="pg_right ps_next" ></a> 
  4. <ul class="clearfix"
  5. <li><a href="javascript:;"><img src="images/activity01-1410.jpg"></a></li> 
  6. <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li> 
  7. <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li> 
  8. <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li> 
  9. <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li> 
  10. </ul> 
  11. </div> 

#activity-slide是整个幻灯的入口,后面会将其作为参数来调用幻灯功能。

两个按钮ps_pre和ps_next将添加click事件响应点击切换功能。

3、功能分析

因为左右切换都是三个为一组的切换,如果li总个数不是3的倍数时,需要增加li节点填满。

 

 
  1. //需要追加的li节点个数 
  2. var addli = 0; 
  3. //一组切换3个li 
  4. var num=3; 
  5. var lisize = a.find("ul li").size();//获取li个数 
  6.  
  7. //判断需要添加的li节点数量 
  8. var reminder=lisize%num; 
  9. if(lisize%num!=0){addli = num-reminder;} 
  10. else{addli = 0;} 
  11. addlist(); 

上面是判断得到需要追加的个数lisize,然后调用addlist追加。

addlist如下,从ul的第一个li开始复制,需要几个就复制出几个节点追加。节点追加完毕后重新计算ul的宽度。

 

 
  1. function addlist(){ 
  2. for(i=0;i<addli;i++){ 
  3. var html = a.find("ul li").eq(i).html(); 
  4. a.find("ul").append("<li>"+html+"</li>");  
  5. a.find("ul").css({"width":(w_li+margin_li*2)*(lisize+addli)}); 

现在准备工作已经完成了。接下来就是给按钮添加响应事件。在幻灯切换时涉及到左右按钮的显示和隐藏,所以先说这个按钮显示功能,将此分装成一个函数btnshow。

 

 
  1. /*** 
  2. 参数说明: 
  3. now:当前是第几组,默认是0 
  4. c:总共有几组 
  5. d:初始化时li的个数 
  6. e:每组显示li个数 
  7. ***/ 
  8. function btnshow(now,c,d,e){ 
  9. if(d<=e){//如果初始化时li的个数小于一组要显示的数,则不显示pre和next按钮 
  10. a.find(".ps_next").hide(); 
  11. a.find(".ps_pre").hide(); 
  12. }else if(now==0){//初始化now=0,显示第一组,只显示next 
  13. a.find(".ps_next").show(); 
  14. a.find(".ps_pre").hide();  
  15. }else if(now==c-1){//显示到最后一组,只显示pre 
  16. a.find(".ps_next").hide(); 
  17. a.find(".ps_pre").show();  
  18. }else{//显示中间组,pre和next都需要显示 
  19. a.find(".ps_next").show(); 
  20. a.find(".ps_pre").show(); 

接下来幻灯切换。这里a是传入的参数,也就是 #activity-slide。给它下面的所以的pre和next添加响应。

向前一组,组数now减一,now是几,就让ul的margin-left为负几倍的组宽(即3倍的(li宽度+margin宽度)),然后显示对于按钮即可。

向后滑动一组li同理。

 

 
  1. function photoscroll(){ 
  2. a.find(".ps_pre").on("click",function(){//console.log(num);  
  3. now--; 
  4. if(now >= 0){  
  5. a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)}); 
  6. btnshow(now,parseInt((lisize+addli)/num),lisize,num); 
  7. }); 
  8.  
  9. a.find(".ps_next").on("click",function(){//console.log(num);  
  10. now++; 
  11. if(now < (lisize+addli)/num){  
  12. a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)}); 
  13. btnshow(now,parseInt((lisize+addli)/num),lisize,num); 
  14. }  
  15. });  
  16. btnshow(now,parseInt((lisize+addli)/num),lisize,num);  

三、实例代码

1、用到图片

基于jquery实现左右按钮点击的图片切换效果

基于jquery实现左右按钮点击的图片切换效果

基于jquery实现左右按钮点击的图片切换效果

基于jquery实现左右按钮点击的图片切换效果

2、完整代码

 

 
  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4. <meta charset="utf-8"
  5. <title></title> 
  6. <link rel="stylesheet" type="text/css" href="css/style.css"
  7.  
  8. <script> 
  9. window.onresize=function(){ 
  10. var winWidth = document.body.clientWidth; 
  11. if(winWidth <=1180){ 
  12. body.className="grid-960";  
  13. }else if (winWidth<= 1410){ 
  14. body.className="grid-1180";  
  15. }else if (winWidth>1410){ 
  16. body.className="grid-1410";  
  17. }else { 
  18. alert("do not know!"); 
  19. </script> 
  20. </head> 
  21. <body id="body" class=""
  22. <script>//初始化状态显示样式判断,放在body后面 
  23. var winWidth = document.body.clientWidth; 
  24. if (winWidth <=1180){ 
  25. body.className="grid-960";  
  26. }else if (winWidth<= 1410){ 
  27. body.className="grid-1180";  
  28. }else if (winWidth>1410){ 
  29. body.className="grid-1410";  
  30. }else { 
  31. alert("do not know!"); 
  32. </script> 
  33. <div class="wapper"
  34.  
  35. <div class="section"
  36. <h2 class="title">热门活动</h2> 
  37. <div class="activity" class="movie" id="activity-slide"
  38. <a href="javascript:void(0)" class="pg_left ps_pre"></a> 
  39. <a href="javascript:void(0)" class="pg_right ps_next" ></a> 
  40. <ul class="clearfix"
  41. <li><a href="javascript:;"><img src="images/activity01-1410.jpg"></a></li> 
  42. <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li> 
  43. <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li> 
  44. <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li> 
  45. <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li> 
  46. </ul> 
  47. </div> 
  48. </div> 
  49.  
  50. </div> 
  51.  
  52.  
  53. </body> 
  54. </html> 
  55. <script src="http://code.jquery.com/jquery-latest.js"></script> 
  56. <script> 
  57. //首页图片滚动切换 
  58. (function($){ 
  59. $.photolist=function(a){  
  60. var w_li = a.find("li").width(); 
  61. var h_li = a.find("li").height(); 
  62. var margin_li=parseInt(a.find("li").css("marginLeft")); 
  63. var now = 0; 
  64. var num = 0; 
  65. var addli = 0; 
  66. var lisize = a.find("ul li").size(); 
  67. var htmlall = a.find("ul").html(); 
  68.  
  69. //判断每次滚动数量 
  70. /* 
  71. var w_body = $("body").width(); 
  72. if(w_body <=1170){ 
  73. var num = 3; 
  74. }else if(w_body<= 1380){ 
  75. var num = 4; 
  76. }else if(w_body>1380){ 
  77. var num = 5; 
  78. } 
  79. */ 
  80. var num=3; 
  81.  
  82. //判断需要添加的li节点数量 
  83. var reminder=lisize%num; 
  84. if(lisize%num!=0){addli = num-reminder;} 
  85. else{addli = 0;} 
  86. addlist(); 
  87. //点击滚动事件 
  88. photoscroll(); 
  89.  
  90. $(window).resize(function(){ 
  91. //location.reload(); 
  92. now = 0; 
  93. addli = 0; 
  94. a.find("ul").html(htmlall);//html内容还原初始值 
  95. a.find(".ps_next").show();//按钮样式初始化 
  96. a.find(".ps_pre").hide(); 
  97. //判断每次滚动数量 
  98. /* 
  99. var w_body = $("body").width(); 
  100. if(w_body <=1170){ 
  101. var num = 3; 
  102. }else if(w_body<= 1380){ 
  103. var num = 4; 
  104. }else if(w_body>1380){ 
  105. var num = 5; 
  106. } 
  107. */ 
  108. var num=3; 
  109. //判断需要添加的li节点数量 
  110. var reminder=lisize%num; 
  111. if(lisize%num!=0){addli = num-reminder;} 
  112. else{addli = 0;} 
  113. addlist(); 
  114. w_li = a.find("li").width(); 
  115. margin_li=parseInt(a.find("li").css("marginLeft")); 
  116. a.find("ul").css({"width":(w_li+margin_li*2)*(lisize+addli)}); 
  117. a.find("ul").animate({"margin-left":0});//ul位置还原 
  118. btnshow(now,parseInt((lisize+addli)/num),lisize,num); 
  119. }); 
  120.  
  121.  
  122. function addlist(){ 
  123. for(i=0;i<addli;i++){ 
  124. var html = a.find("ul li").eq(i).html(); 
  125. a.find("ul").append("<li>"+html+"</li>");  
  126. a.find("ul").css({"width":(w_li+margin_li*2)*(lisize+addli)}); 
  127. //console.log(a.find("ul li").size()); 
  128. function photoscroll(){ 
  129. a.find(".ps_pre").on("click",function(){//console.log(num);  
  130. now--; 
  131. if(now >= 0){  
  132. a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)}); 
  133. btnshow(now,parseInt((lisize+addli)/num),lisize,num); 
  134. }); 
  135.  
  136. a.find(".ps_next").on("click",function(){//console.log(num);  
  137. now++; 
  138. if(now < (lisize+addli)/num){  
  139. a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)}); 
  140. btnshow(now,parseInt((lisize+addli)/num),lisize,num); 
  141. }  
  142. });  
  143. btnshow(now,parseInt((lisize+addli)/num),lisize,num);  
  144. /*** 
  145. 参数说明: 
  146. now:当前是第几组,默认是0 
  147. c:总共有几组 
  148. d:初始化时li的个数 
  149. e:每组显示li个数 
  150. ***/ 
  151. function btnshow(now,c,d,e){ 
  152. if(d<=e){//如果初始化时li的个数小于一组要显示的数,则不显示pre和next按钮 
  153. a.find(".ps_next").hide(); 
  154. a.find(".ps_pre").hide(); 
  155. }else if(now==0){//初始化now=0,显示第一组,只显示next 
  156. a.find(".ps_next").show(); 
  157. a.find(".ps_pre").hide();  
  158. }else if(now==c-1){//显示到最后一组,只显示pre 
  159. a.find(".ps_next").hide(); 
  160. a.find(".ps_pre").show();  
  161. }else{//显示中间组,pre和next都需要显示 
  162. a.find(".ps_next").show(); 
  163. a.find(".ps_pre").show(); 
  164.  
  165. })(jQuery);  
  166. $.photolist($("#activity-slide")); 
  167. </script> 

css部分:

 

 
  1. @charset "utf-8"
  2. body, div, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, code, form, fieldset, legend, button, textarea, table, tbody, tfoot, thead, th, td, article, aside, dialog, figure, footer, header, hgroup, menu, nav, section, time, mark, audio, video { margin: 0; padding: 0; outline:nonebackground:transparent; 
  3. article, aside, dialog, figure, footer, header, hgroup, nav, section { display: block; } 
  4. body, button, input, select, textarea { font: 12px/1.5 arial, /5b8b/4f53, sans-serif; } 
  5. h1, h2, h3, h4, h5, h6, button, input, select, textarea { font-size: 100%; outline: none } 
  6. address, cite, dfn, em, var { font-style: normal; } 
  7. code, kbd, pre, samp { font-family: courier new, courier, monospace; } 
  8. small { font-size: 12px; } 
  9. ul, ol, li { list-style: none; } 
  10. img { border: none; } 
  11. a { text-decoration: none; outline: thin none; } 
  12. a:hover { text-decoration: underline; } 
  13. table { border-collapse: collapse; border-spacing: 0; } 
  14. .clear { clear: both; } 
  15. .clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } 
  16. html { -webkit-text-size-adjust: none; } 
  17. body { font: 12px/1.5 /5FAE/8F6F/96C5/9ED1, tahoma, arial, /5b8b/4f53, sans-serif; } 
  18.  
  19.  
  20.  
  21. .grid-960 .wapper { width: 100%; min-width:960px;height: auto; margin: 0 auto; background: url(../images/bg-body-960.jpg) no-repeat center top; } 
  22. .grid-1180 .wapper { width: 100%; min-width:1180px;height: auto; margin: 0 auto; background: url(../images/bg-body-1180.jpg) no-repeat center top; } 
  23. .grid-1410 .wapper { width: 100%; min-width:1410px;height: auto; margin: 0 auto; background: url(../images/bg-body-1410.jpg) no-repeat center top; } 
  24.  
  25. /*热门活动*/ 
  26. .grid-960 .section { width: 960px; margin: 0 auto;background-color:#eaf2ff; } 
  27. .grid-1180 .section { width: 1180px; margin: 0 auto;background-color:#eaf2ff;} 
  28. .grid-1410 .section { width: 1410px; margin: 0 auto;background-color:#eaf2ff;} 
  29.  
  30. .title{padding:0 102px;height:70px;line-height:70px;font-size:24px;font-weight:normal;color:#fff;text-shadow: 0 3px #df2828, 3px 0 #df2828;background:#cc2223 url(../images/bg-title.jpg) no-repeat left top;} 
  31.  
  32. .viewall:hover{text-decoration:none;} 
  33. .viewall{font-size:18px;;color:#fff;text-shadow: 0 3px #df2828, 3px 0 #df2828;float:right;} 
  34.  
  35. .grid-1410 .title {padding:0 116px;background-image:url(../images/bg-title-1410.jpg);} 
  36.  
  37. .grid-960 .contentwrap{width:800px;margin:0 auto;} 
  38. .grid-1180 .contentwrap{width:980px;margin:0 auto;} 
  39. .grid-1410 .contentwrap{width:1180px;margin:0 auto;} 
  40.  
  41. .grid-960 .activity{width:826px;height:152px;overflow:hidden;margin:0 auto;position:relative;} 
  42. .grid-1180 .activity{width:1020px;height:192px;overflow:hidden;margin:0 auto;position:relative;} 
  43. .grid-1410 .activity{width:1230px;height:232px;overflow:hidden;margin:0 auto;position:relative;} 
  44.  
  45. .grid-960 .activity ul{height:152px;overflow:hidden;} 
  46. .grid-1180 .activity ul{height:192px;overflow:hidden;} 
  47. .grid-1410 .activity ul{height:232px;overflow:hidden;} 
  48.  
  49. .activity li img{display:block;width:100%;height:100%;} 
  50. .activity li{display:block;float:left;} 
  51.  
  52. .grid-960 .activity li{width:250px;height:125px;overflow:hidden;margin:12px;} 
  53. .grid-1180 .activity li{width:300px;height:150px;overflow:hidden;margin:20px;} 
  54. .grid-1410 .activity li{width:360px;height:180px;overflow:hidden;margin:25px;} 
  55. /*js切换*/ 
  56. .pg_left,.pg_right {position: absolute;z-index: 999;width: 35px;height: 50px;overflow: hidden;} 
  57. .pg_right {background: transparent url(../images/pg_right.png) no-repeat scroll 5px 7px;} 
  58. .pg_right:hover {background: transparent url(../images/hover.png) no-repeat scroll 0 0;} 
  59. .grid-960 .pg_right{top:75px;right:16px;margin-top:-25px;} 
  60. .grid-1180 .pg_right{top:95px;right:20px;margin-top:-25px;} 
  61. .grid-1410 .pg_right{top:115px;right:25px;margin-top:-25px;} 
  62.  
  63. .pg_left {background: transparent url(../images/pg_left.png) no-repeat scroll 5px 7px;} 
  64. .pg_left:hover {background: transparent url(../images/hover.png) no-repeat scroll right 0;} 
  65. .grid-960 .pg_left{top:75px;left:13px;margin-top:-25px;} 
  66. .grid-1180 .pg_left{top:95px;left:20px;margin-top:-25px;} 
  67. .grid-1410 .pg_left{top:115px;left:25px;margin-top:-25px;} 

以上就是本文的全部内容,希望对大家的学习有所帮助。


注:相关教程知识阅读请移步到JavaScript/Ajax教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选