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 相关文章推荐
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
Jquery把获取到的input值转换成json
May 15 jQuery
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
Jun 02 jQuery
jQuery validata插件实现方法
Jun 25 jQuery
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
jQuery实现模糊查询的方法分析
May 10 jQuery
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
jquery实现直播弹幕效果
Nov 28 jQuery
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
jQuery实现广告显示和隐藏动画
Jul 04 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
php5中类的学习
2008/03/28 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python字符类型的一些方法小结
2016/05/16 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
公司建议书怎么写
2014/05/15 职场文书
幼儿发展评估方案
2014/06/11 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
学术研讨会主持词
2015/07/04 职场文书
关于Vue中的options选项
2022/03/22 Vue.js