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


Posted in Javascript onJanuary 27, 2021

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

一、最终效果

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

二、功能分析

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、用到图片

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

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

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

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

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

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

Javascript 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤
Apr 23 Javascript
国外的为初学者写的JavaScript教程
Jun 09 Javascript
javascript下string.format函数补充
Aug 24 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
Nov 21 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
Oct 22 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
vue组件挂载到全局方法的示例代码
Aug 02 Javascript
JavaScript基础教程之如何实现一个简单的promise
Sep 11 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 11 Javascript
js图片轮播效果实现代码
Apr 18 #Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 #Javascript
javascript发送短信验证码实现代码
Nov 12 #Javascript
javascript倒计时效果实现
Nov 12 #Javascript
基于jquery步骤进度条源码分享
Nov 12 #Javascript
javascript手风琴下拉菜单实现代码
Nov 12 #Javascript
javascript弹出窗口实现代码
Nov 12 #Javascript
You might like
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
python实现rsa加密实例详解
2017/07/19 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python 中的lambda函数介绍
2018/10/10 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
求职信模版
2013/11/30 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
《藏戏》教学反思
2014/02/11 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
假面舞会策划方案
2014/05/29 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
早读课迟到检讨书
2014/09/25 职场文书
优秀团支部申报材料
2014/12/26 职场文书
用Python将库打包发布到pypi
2021/04/13 Python