jquery实现图片轮播器


Posted in jQuery onMay 23, 2017

一、轮播器

1、HTML框架

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <title>图片轮播器</title>
  <link rel="stylesheet" type="text/css" href="slider.css" rel="external nofollow" />
  <script src="Jquery.js"></script>
  <script src="slider.js"></script>
 </head>
 <body>
 <div class="wrap">
 <!--快捷键 .wrap>(ul>li*4>img[src=$.jpg])+ol>li*4 -->
  <ul>
   <li><img src="1.jpg" alt="11" /></li>
   <li><img src="2.jpg" alt="22" /></li>
   <li><img src="3.jpg" alt="33" /></li>
   <li><img src="4.jpg" alt="44" /></li>
  </ul>
  <ol>
   <li class="current">1</li>
   <li>2</li>
   <li>3</li>
   <li>4</li>
  </ol>
  <p class="introduce"></p>
 </div>
 </body>
</html>

2、css的样式

/*清除列表前默认黑点*/
*{
 margin: 0;
 padding: 0;
}
img{
 border:0;
}
ol, ul ,li{list-style: none;} 
body{
 margin: 50px;
}
.wrap{
 width: 500px;/*一张图片的高和宽*/
 height: 350px;
 border: 1px solid red;
 position: relative;/*以这一张图的边框为基准位置*/
 overflow: hidden;/* 将超过这个长宽高的部分隐藏 */
}
.wrap ul{
 width: 2000px;/*列表的行是四张图片的宽度*/
 position: absolute;/* 防止图片溢出 */
 left: 0;
 top: 0;
}
.wrap ul li {
 float: left;/* 将四张图片紧挨着横着排列 */
 width: 500px;
}
.wrap ol{
 position: absolute;
 bottom: 10px;
 right:10px;
}
.wrap ol li{
 float: left;/* 达到 横着排列 的目的*/
 width: 16px;
 height: 16px;
 line-height: 16px;
 text-align: center;/* 字体在列元素中举重显示 */
 color: #fff;
 background: #000;
 border: 1px solid yellow;
 margin-right: 3px;/* 列与列之间的距离 */
 cursor: pointer;
}
.wrap ol li.current{
 background: #fff;
 color:#000;
}
.wrap .introduce{
 width:400px ;
 height: 30px;
 line-height: 30px;
background: rgba(0, 0, 0, 0.5);
/* 达到透明显示的作用;或者用“opacity:0.5 ;
 filter: alpha(opacity = 50);” */
 color: #fff;
 position: absolute;
 bottom: 0;
 left: 0;
}

3、JS控制

$(document).ready(function(){
 var oul = $('.wrap ul');  //获取 行;
 var ali = $('.wrap ul li'); //获取 列;
 var numLi = $('.wrap ol li');//获取数字的 列;
 var aliWidth = $('.wrap ul li').eq(0).width(); //获取单张图片的宽度;
 var _now = 0;//这个控制数字样式的计数器
 var _now2 = 0;//这个是控制图片运动距离的计数器
 var timeId; //定时器的开关
 var aimg = $('.wrap ul img');//获取wrap中img元素
 var op = $('.wrap p')  //获取wrap中p元素
 
 
 numLi.click(function() {       //鼠标点击触发的函数;
  var index = $(this).index();  //如果点击第一张图片,index=0;
  _now = index;      
  //不管_now还是_now2都要和点击时index同步;
  _now2 = index;
  var imgAlt = aimg.eq(_now).attr('alt');//获取 _now时刻的的alt值
  op.html(imgAlt);      //并将atl值显示
 
  $(this).addClass('current').siblings().removeClass();
  //数字样式 的 增和删;
  oul.animate({'left':-aliWidth*index},500);   
  //图片的移动,行元素的左侧距离wrap的左侧-500*index
 });
 
 
 function slider(){
  if (_now==numLi.size()-1) {  //当滚动到第四张图片的时候
    ali.eq(0).css({   //通过定位的方法将第一张移到最后一张;
     'position':'relative',
     'left':oul.width()
    });
   _now=0;
  }
  else{
   _now++;        //如果没达到第四张,那就将_new+1;
  }
  _now2++;        //图片控制计数器 +1;
  numLi.eq(_now).addClass('current').siblings().removeClass();       //数字样式 的 增和删;
  var imgAlt = aimg.eq(_now).attr('alt'); //获取 _now时刻的的alt值
  op.html(imgAlt);       //并将atl值显示
  oul.animate({'left':-aliWidth*_now2},500,function(){   
  //图片的移动,行元素的左侧距离wrap的左侧-500*now2
   if (_now==0) {
    ali.eq(0).css('position','static');
    oul.css('left',0);
    _now2=0;
   }
  });
 }
 
timeId = setInterval(slider,1500);   
//每1500ms,自动切换图片
 //鼠标点击图片则停止计时器,停止“自动切换图片”;离开则继续定时器切换图片
 // $('.wrap').mouseover(function(event) {
 //  clearInterval(timeId);
 // });
 
 // $('.wrap').mouseover(function(event) {
 //  timeId = setInterval(slider,1500);
 // });
 
 $('.wrap').hover(function() {    
  clearInterval(timeId);
 
 }, function() {
  timeId = setInterval(slider,1500);
  
 });
});

*重要函数

1、获取各个标签值并显示

var imgAlt = aimg.eq(_now).attr('alt');//获取 _now时刻的的alt值
  op.html(imgAlt);    //并将atl值显示

2、改变数字样式

$(this).addClass('current').siblings().removeClass();
  //数字样式 的 增和删;

3、滚动图片

oul.animate({'left':-aliWidth*index},500);   
 //图片的移动,行元素的左侧距离wrap的左侧-500*index

*注意点

1、同步

_now = index;
 //不管_now还是_now2都要和点击时index同步;
 //index可能在点击鼠标之后变成3,;松开鼠标后我们希望_now变成从3变成0,但是因为setInterval之后_now加1,_now其实还是从0变成1;所以需要同步_now和index;

2、计数器

_now2的作用是防止父元素在第一张留出空白图片;数字定时器和图片运动控制定时器是不同步的

var _now = 0;//这个控制数字样式的计数器
var _now2 = 0;//这个是控制图片运动距离的计数器

3、去relative属性

if (_now==0) {
    ali.eq(0).css('position','static');//去relative属性
    oul.css('left',0);//当去完relative之后,要还原ul的“left”值为0;
    _now2=0;

4、去属性的时机

Oul.animate({css属性的设置},500,function())其中function就是在500ms执行完之后的操作;

oul.animate({'left':-aliWidth*_now2},500,function(){     
  //图片的移动,行元素的左侧距离wrap的左侧-500*now2
  //根据一组css执行属性动画   
   if (_now==0) {
    ali.eq(0).css('position','static');
    oul.css('left',0);
    _now2=0; //当_now为0的时候,_now2也应该还原回去为0;
   }
  });

*难点

首先,要学会获取元素值;
其次,了解几种函数;
再则,变量的灵活使用,达到了解变量每时每刻的值;
最后,定时器的控制是最难的;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
jQuery实现可兼容IE6的滚动监听功能
Sep 20 jQuery
jQuery插件artDialog.js使用与关闭方法示例
Oct 09 jQuery
基于jquery实现五星好评
Nov 18 jQuery
javaScript和jQuery自动加载简单代码实现方法
Nov 24 jQuery
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
JQuery表单元素取值赋值方法总结
May 12 jQuery
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
jQuery实现简单的滑动导航代码(移动端)
May 22 #jQuery
jQuery滑动到底部加载下一页数据的实例代码
May 22 #jQuery
jQuery表单验证之密码确认
May 22 #jQuery
JQuery 封装 Ajax 常用方法(推荐)
May 21 #jQuery
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 #jQuery
关于jQuery库冲突的完美解决办法
May 20 #jQuery
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 #jQuery
You might like
php中日期加减法运算实现代码
2011/12/08 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
JavaScript中this详解
2015/09/01 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
vue实现表格数据的增删改查
2017/07/10 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
举例讲解Python中is和id的用法
2015/04/03 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
java程序员面试交流
2012/11/29 面试题
个人对照检查材料
2014/02/12 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书