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插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
jQuery Masonry瀑布流布局神器使用详解
May 25 jQuery
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
jquery中done和then的区别(详解)
Dec 19 jQuery
jquery实现搜索框功能实例详解
Jul 23 jQuery
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 jQuery
jQuery Migrate 插件用法实例详解
May 22 jQuery
jquery.tagsinput.js实现记录checkbox勾选的顺序
Sep 21 jQuery
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
php中yii框架实例用法
2020/12/22 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
Python调用命令行进度条的方法
2015/05/05 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
shell的种类有哪些
2015/04/15 面试题
大学旷课检讨书
2014/01/28 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
美术专业自荐信
2014/07/07 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS