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+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 jQuery
jquery实现图片轮播器
May 23 jQuery
jQuery自定义多选下拉框效果
Jun 19 jQuery
jquery单击文字或图片内容放大并居中显示
Jun 23 jQuery
jquery图片放大镜效果
Jun 23 jQuery
jQuery结合jQuery.cookie.js插件实现换肤功能示例
Oct 14 jQuery
详解使用jQuery.i18n.properties实现js国际化
May 04 jQuery
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
jquery实现上传文件进度条
Mar 26 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
php多任务程序实例解析
2014/07/19 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
python实现用于测试网站访问速率的方法
2015/05/26 Python
python编程嵌套函数实例代码
2018/02/11 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
python flask搭建web应用教程
2019/11/19 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
django框架cookie和session用法实例详解
2019/12/10 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
中学学校门卫岗位职责
2014/08/15 职场文书
公诉意见书范文
2015/06/05 职场文书
走进科学观后感
2015/06/18 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB