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

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

一、最终效果

二、功能分析
1、需求分析
点击左边pre按钮,显示前面三个图片,点击右边的next按钮,显示后面的一组(三个)图片。初始化只显示next按钮,到最后一组只显示pre按钮,中间过程两按钮都显示。
2、html结构分析

 <div class="activity" id="activity-slide">
  <a href="javascript:void(0)" class="pg_left ps_pre"></a>
  <a href="javascript:void(0)" class="pg_right ps_next" ></a>
   <ul class="clearfix">
   <li><a href="javascript:;"><img src="images/activity01-1410.jpg"></a></li>
   <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li>
   <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li>
   <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li>
   <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li>
  </ul>
</div>

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

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

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

//需要追加的li节点个数
var addli = 0;
//一组切换3个li
var num=3;
var lisize = a.find("ul li").size();//获取li个数

//判断需要添加的li节点数量
var reminder=lisize%num;
if(lisize%num!=0){addli = num-reminder;}
else{addli = 0;}
addlist();

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

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

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

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

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

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

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

向后滑动一组li同理。

 function photoscroll(){
   a.find(".ps_pre").on("click",function(){//console.log(num);
    now--;
    if(now >= 0){
     a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
     btnshow(now,parseInt((lisize+addli)/num),lisize,num);
    }
   });

   a.find(".ps_next").on("click",function(){//console.log(num);
    now++;
    if(now < (lisize+addli)/num){
     a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
     btnshow(now,parseInt((lisize+addli)/num),lisize,num);
    }
   });
   btnshow(now,parseInt((lisize+addli)/num),lisize,num);
  }

三、实例代码
1、用到图片

2、完整代码

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/style.css">

<script>
window.onresize=function(){
 var winWidth = document.body.clientWidth;
 if(winWidth <=1180){
  body.className="grid-960";
 }else if (winWidth<= 1410){
  body.className="grid-1180";
 }else if (winWidth>1410){
  body.className="grid-1410";
 }else {
  alert("do not know!");
 }
}
</script>
</head>
<body id="body" class="">
<script>//初始化状态显示样式判断,放在body后面
var winWidth = document.body.clientWidth;
if (winWidth <=1180){
 body.className="grid-960";
}else if (winWidth<= 1410){
 body.className="grid-1180";
}else if (winWidth>1410){
 body.className="grid-1410";
}else {
 alert("do not know!");
}
</script>
<div class="wapper">

 <div class="section">
  <h2 class="title">热门活动</h2>
  <div class="activity" class="movie" id="activity-slide">
   <a href="javascript:void(0)" class="pg_left ps_pre"></a>
   <a href="javascript:void(0)" class="pg_right ps_next" ></a>
   <ul class="clearfix">
    <li><a href="javascript:;"><img src="images/activity01-1410.jpg"></a></li>
    <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li>
    <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li>
    <li><a href="javascript:;"><img src="images/activity03-1410.jpg"></a></li>
    <li><a href="javascript:;"><img src="images/activity02-1410.jpg"></a></li>
   </ul>
  </div>
 </div>

</div>

</body>
</html>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
//首页图片滚动切换
(function($){
 $.photolist=function(a){
  var w_li = a.find("li").width();
  var h_li = a.find("li").height();
  var margin_li=parseInt(a.find("li").css("marginLeft"));
  var now = 0;
  var num = 0;
  var addli = 0;
  var lisize = a.find("ul li").size();
  var htmlall = a.find("ul").html();

  //判断每次滚动数量
  /*
  var w_body = $("body").width();
  if(w_body <=1170){
   var num = 3;
  }else if(w_body<= 1380){
   var num = 4;
  }else if(w_body>1380){
   var num = 5;
  }
  */
  var num=3;

  //判断需要添加的li节点数量
  var reminder=lisize%num;
  if(lisize%num!=0){addli = num-reminder;}
  else{addli = 0;}
  addlist();
  //点击滚动事件
  photoscroll();

  $(window).resize(function(){
   //location.reload();
   now = 0;
   addli = 0;
   a.find("ul").html(htmlall);//html内容还原初始值
   a.find(".ps_next").show();//按钮样式初始化
   a.find(".ps_pre").hide();
   //判断每次滚动数量
   /*
   var w_body = $("body").width();
   if(w_body <=1170){
    var num = 3;
   }else if(w_body<= 1380){
    var num = 4;
   }else if(w_body>1380){
    var num = 5;
   }
   */
   var num=3;
   //判断需要添加的li节点数量
   var reminder=lisize%num;
   if(lisize%num!=0){addli = num-reminder;}
   else{addli = 0;}
   addlist();
   w_li = a.find("li").width();
   margin_li=parseInt(a.find("li").css("marginLeft"));
   a.find("ul").css({"width":(w_li+margin_li*2)*(lisize+addli)});
   a.find("ul").animate({"margin-left":0});//ul位置还原
   btnshow(now,parseInt((lisize+addli)/num),lisize,num);
  });

  function addlist(){
   for(i=0;i<addli;i++){
    var html = a.find("ul li").eq(i).html();
    a.find("ul").append("<li>"+html+"</li>");
   }
   a.find("ul").css({"width":(w_li+margin_li*2)*(lisize+addli)});
   //console.log(a.find("ul li").size());
  }
  function photoscroll(){
   a.find(".ps_pre").on("click",function(){//console.log(num);
    now--;
    if(now >= 0){
     a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
     btnshow(now,parseInt((lisize+addli)/num),lisize,num);
    }
   });

   a.find(".ps_next").on("click",function(){//console.log(num);
    now++;
    if(now < (lisize+addli)/num){
     a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
     btnshow(now,parseInt((lisize+addli)/num),lisize,num);
    }
   });
   btnshow(now,parseInt((lisize+addli)/num),lisize,num);
  }
  /***
  参数说明:
  now:当前是第几组,默认是0
  c:总共有几组
  d:初始化时li的个数
  e:每组显示li个数
  ***/
  function btnshow(now,c,d,e){
   if(d<=e){//如果初始化时li的个数小于一组要显示的数,则不显示pre和next按钮
    a.find(".ps_next").hide();
    a.find(".ps_pre").hide();
   }else if(now==0){//初始化now=0,显示第一组,只显示next
    a.find(".ps_next").show();
    a.find(".ps_pre").hide();
   }else if(now==c-1){//显示到最后一组,只显示pre
    a.find(".ps_next").hide();
    a.find(".ps_pre").show();
   }else{//显示中间组,pre和next都需要显示
    a.find(".ps_next").show();
    a.find(".ps_pre").show();
   }
  }

 }
})(jQuery);
$.photolist($("#activity-slide"));
</script>

css部分:

@charset "utf-8";
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;
}
article, aside, dialog, figure, footer, header, hgroup, nav, section { display: block; }
body, button, input, select, textarea { font: 12px/1.5 arial, \5b8b\4f53, sans-serif; }
h1, h2, h3, h4, h5, h6, button, input, select, textarea { font-size: 100%; outline: none }
address, cite, dfn, em, var { font-style: normal; }
code, kbd, pre, samp { font-family: courier new, courier, monospace; }
small { font-size: 12px; }
ul, ol, li { list-style: none; }
img { border: none; }
a { text-decoration: none; outline: thin none; }
a:hover { text-decoration: underline; }
table { border-collapse: collapse; border-spacing: 0; }
.clear { clear: both; }
.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; }
html { -webkit-text-size-adjust: none; }
body { font: 12px/1.5 \5FAE\8F6F\96C5\9ED1, tahoma, arial, \5b8b\4f53, sans-serif; }

.grid-960 .wapper { width: 100%; min-width:960px;height: auto; margin: 0 auto; background: url(../images/bg-body-960.jpg) no-repeat center top; }
.grid-1180 .wapper { width: 100%; min-width:1180px;height: auto; margin: 0 auto; background: url(../images/bg-body-1180.jpg) no-repeat center top; }
.grid-1410 .wapper { width: 100%; min-width:1410px;height: auto; margin: 0 auto; background: url(../images/bg-body-1410.jpg) no-repeat center top; }

/*热门活动*/
.grid-960 .section { width: 960px; margin: 0 auto;background-color:#eaf2ff; }
.grid-1180 .section { width: 1180px; margin: 0 auto;background-color:#eaf2ff;}
.grid-1410 .section { width: 1410px; margin: 0 auto;background-color:#eaf2ff;}

.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;}

.viewall:hover{text-decoration:none;}
.viewall{font-size:18px;;color:#fff;text-shadow: 0 3px #df2828, 3px 0 #df2828;float:right;}

.grid-1410 .title {padding:0 116px;background-image:url(../images/bg-title-1410.jpg);}

.grid-960 .contentwrap{width:800px;margin:0 auto;}
.grid-1180 .contentwrap{width:980px;margin:0 auto;}
.grid-1410 .contentwrap{width:1180px;margin:0 auto;}

.grid-960 .activity{width:826px;height:152px;overflow:hidden;margin:0 auto;position:relative;}
.grid-1180 .activity{width:1020px;height:192px;overflow:hidden;margin:0 auto;position:relative;}
.grid-1410 .activity{width:1230px;height:232px;overflow:hidden;margin:0 auto;position:relative;}

.grid-960 .activity ul{height:152px;overflow:hidden;}
.grid-1180 .activity ul{height:192px;overflow:hidden;}
.grid-1410 .activity ul{height:232px;overflow:hidden;}

.activity li img{display:block;width:100%;height:100%;}
.activity li{display:block;float:left;}

.grid-960 .activity li{width:250px;height:125px;overflow:hidden;margin:12px;}
.grid-1180 .activity li{width:300px;height:150px;overflow:hidden;margin:20px;}
.grid-1410 .activity li{width:360px;height:180px;overflow:hidden;margin:25px;}
/*js切换*/
.pg_left,.pg_right {position: absolute;z-index: 999;width: 35px;height: 50px;overflow: hidden;}
.pg_right {background: transparent url(../images/pg_right.png) no-repeat scroll 5px 7px;}
.pg_right:hover {background: transparent url(../images/hover.png) no-repeat scroll 0 0;}
.grid-960 .pg_right{top:75px;right:16px;margin-top:-25px;}
.grid-1180 .pg_right{top:95px;right:20px;margin-top:-25px;}
.grid-1410 .pg_right{top:115px;right:25px;margin-top:-25px;}

.pg_left {background: transparent url(../images/pg_left.png) no-repeat scroll 5px 7px;}
.pg_left:hover {background: transparent url(../images/hover.png) no-repeat scroll right 0;}
.grid-960 .pg_left{top:75px;left:13px;margin-top:-25px;}
.grid-1180 .pg_left{top:95px;left:20px;margin-top:-25px;}
.grid-1410 .pg_left{top:115px;left:25px;margin-top:-25px;}

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

(0)

相关推荐

  • jQuery自动或手动图片切换效果

    学习JS的时候本来积攒了很多有趣的小例子,但是苦于没有找到一些好的平台来展示这些JS效果.今天发现了RunJS这个分享代码的平台,迫不及待得想跟大家分享. 在浏览各大商城网站的时候,或者某些网站的首页,都会展示与本网站相关的一些实时切换的图片, 本文就给大家分享一个用jQuery实现图片自动切换的例子. 主页核心代码(Default.aspx): <!DOCTYPE html> <html> <head> <meta http-equiv="Conten

  • jQuery插件slick实现响应式移动端幻灯片图片切换特效

    jQuery响应式手机端移动端幻灯片图片切换特效插件slick,基于jQuery,功能非常强大,支持左右按钮切换.支持圆点切换.支持自定义切换数量,支持自定义切换速度.支持图片预加载.支持自动播放定义,效果非常的不错,众多的参数自定义支持,觉得可以的可以参考他们的参数配置,还是值得学习使用的. 使用方法: 1.加载插件和jQuery <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> &l

  • 一个基于jquery的图片切换效果

    下面的代码对于学习jquery的朋友是个参考html代码: 代码 复制代码 代码如下: <div class="warp" id="warp"> <img src="http://images.cnblogs.com/cnblogs_com/zhangle/252347/t_pic1.bmp" alt="" class="imgBig" /> <img src="ht

  • jQuery简单实现banner图片切换

    主要运用了定时器的原理,bind,trigger应用等 复制代码 代码如下: <!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>banner切换实现</title>    <style type="text/css">        /*        * @description: banner切换样式 

  • jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结

    本文实例讲述了jQuery实现的Tab滑动选项卡及图片切换效果.分享给大家供大家参考.具体如下: 这里汇总了几个Tab,滑动门,选项卡,图片切换,在一个网页中实现了超多的常用效果,大家喜欢的滑动门,焦点图切换,标签选项卡以及文字轮番等都集中在了一起,无聊的功劳,忙的时候还顾不上写,另外还加入了圆角,都是参考以前学习的知识写的.期间使用了jquery-1.6.2.min.js框架库. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-n

  • 基于Jquery的简单图片切换效果

    复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script type="text/javascrip

  • jQuery图片切换插件jquery.cycle.js使用示例

    Cycle是一个很棒的jQuery图片切换插件,提供了非常好的功能来帮助大家更简单的使用插件的幻灯功能 下载cycle插件并引入,此时,注意把引入它的代码放在引入jQuery主文件之后. 复制代码 代码如下: <head> <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script> <script type="text/javascri

  • jQuery 一个图片切换的插件

    以下是参数说明:  参数名称  描述  delay  图片切换速度,单位毫秒  maskOpacity  遮罩层透明度,1为不透明,0为全透明  numOpacity  数字按钮透明度,1为不透明,0为全透明  maskBgColor  遮罩层背景色  textColor  标题字体颜色  numColor  数字按钮字体颜色  numBgColor  数字按钮背景色  alterColor  数字按钮选中项字体颜色  alterBgColor  数字按钮选中项背景颜色插件代码及调用 - 插件名

  • jQuery插件Slider Revolution实现响应动画滑动图片切换效果

    这是一款非常强大的内容切换插件,它基于jQuery,它充分响应,支持移动设备,支持手机触摸,键盘翻页:它内置幻灯.视频播放计时器,它拥有各种模式:自定义,自动响应,全屏:它有多种动画效果.3d效果...总之你想到的效果它都做到了,它的名字叫Slider Revolution. HTML Slider Revolution是一款基于jQuery的插件,使用它时需要先载入jQuery库文件,以及Slider Revolution依赖的css和js文件. <script src="js/jque

  • JQuery页面图片切换和新闻列表滚动效果的具体实现

    最近用到一个页面上图片左右切换和新闻列表滚动呈现的效果,整理如下: 前段代码: 复制代码 代码如下: <!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"&g

随机推荐