jquery实现定时自动轮播特效


Posted in Javascript onDecember 10, 2015

这次的轮播图是在上一篇文章jQuery手动点击实现图片轮播特效的基础上写出来的,也就是本次展示的是手动点击轮播效果以及定时自动轮播效果的程序,建议想连贯学习的小伙伴把我之前的文章看一看,看完后再看这篇文章~~~~

下面来看看我做的最终定时自动轮播效果以及手动点击轮播效果:

 jquery实现定时自动轮播特效

对于上面的展示动画速度比较快的原因是因为我的截图软件是绿色版,免费的~~~你们懂得,就是卡卡的,真正的效果比这个速度慢,而且还是匀速,可以商用~~~所以上面的展示动画只能当做完成效果的参考。
一、主体程序

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8" />
 <title>轮播图①(手动点击轮播)</title>
 <link type="text/css" rel="stylesheet" href="css/layout.css" />
 </head>
 <body>
 <div class="slideShow">
 <!--图片布局开始-->
 <ul>
 <li><a href="#"><img src="img/picture01.jpg" /></a></li>
 <li><a href="#"><img src="img/picture02.jpg" /></a></li>
 <li><a href="#"><img src="img/picture03.jpg" /></a></li>
 <li><a href="#"><img src="img/picture04.jpg" /></a></li>
 </ul>
 <!--图片布局结束-->
 
 <!--按钮布局开始-->
 <div class="showNav">
 <span class="active">1</span>
 <span>2</span>
 <span>3</span>
 <span>4</span>
 </div>
 <!--按钮布局结束-->
 </div>
 <script src="js/jquery-1.11.3.js"></script>
 <script src="js/layout.js"></script>
 </body>
</html>

额,上面的主体程序和前一篇没有区别,未做任何修改~~~~~感兴趣的可以查看第一篇文章,我本次随笔重点会在Jquery程序里面
二、CSS样式

*{
 margin: 0;
 padding: 0;
}
ul{
 list-style: none;
}
.slideShow{
 width: 346px;
 height: 210px; /*其实就是图片的高度*/
 border: 1px #eeeeee solid;
 margin: 100px auto;
 position: relative;
 overflow: hidden; /*此处需要将溢出框架的图片部分隐藏*/
}
.slideShow ul{
 width: 2000px;
 position: relative; /*此处需注意relative : 对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置,如果没有这个属性,图片将不可左右移动*/
}
.slideShow ul li{
 float: left; /*让四张图片左浮动,形成并排的横着布局,方便点击按钮时的左移动*/
 width: 346px;
}
.slideShow .showNav{ /*用绝对定位给数字按钮进行布局*/
 position: absolute;
 right: 10px;
 bottom: 5px;
 text-align:center;
 font-size: 12px; 
 line-height: 20px;
}
.slideShow .showNav span{
 cursor: pointer;
 display: block;
 float: left;
 width: 20px;
 height: 20px;
 background: #ff5a28;
 margin-left: 2px;
 color: #fff;
}
.slideShow .showNav .active{
 background: #b63e1a;
}

三、jQuery程序
首先说一下定时自动轮播的原理:
1、首先得开一个定时器,假设定时器的时间设置为2000ms,也就是2S定时器执行一次操作
2、定时器每隔2S执行的操作就是模拟按次序点击数字按钮,也就是触发click事件,让图片左移
先来看大体效果实现的jQuery代码一:      

var timer=null; //定时器返回值,主要用于关闭定时器
 var iNow=0; //iNow为正在展示的图片索引值,当用户打开网页时首先显示第一张图,即索引值为0
 timer=setInterval(function(){ //打开定时器
 iNow++;  //让图片的索引值次序加1,这样就可以实现顺序轮播图片
 showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click事件
 },2000); //2000为轮播的时间

上面的程序可以实现每隔2S图片的轮播效果,但是轮播到最后一张图的时候会停止,因为没有判断iNow是否到达最后一张图,所以有了下面的代码二

var timer=null; //定时器返回值,主要用于关闭定时器
 var iNow=0; //iNow为正在展示的图片索引值,当用户打开网页时首先显示第一张图,即索引值为0
 timer=setInterval(function(){ //打开定时器
 iNow++;  //让图片的索引值次序加1,这样就可以实现顺序轮播图片
 if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
 iNow=0;
 }
 showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
 },2000); //2000为轮播的时间

所以jQuery程序的完整代码程序如下:

$(document).ready(function(){
 var slideShow=$(".slideShow"), //获取最外层框架的名称
 ul=slideShow.find("ul"), 
 showNumber=slideShow.find(".showNav span"),//获取按钮
 oneWidth=slideShow.find("ul li").eq(0).width(); //获取每个图片的宽度
 var timer=null; //定时器返回值,主要用于关闭定时器
 var iNow=0; //iNow为正在展示的图片索引值,当用户打开网页时首先显示第一张图,即索引值为0
 
 showNumber.on("click",function(){ //为每个按钮绑定一个点击事件 
 $(this).addClass("active").siblings().removeClass("active"); //按钮点击时为这个按钮添加高亮状态,并且将其他按钮高亮状态去掉
 var index=$(this).index(); //获取哪个按钮被点击,也就是找到被点击按钮的索引值
 ul.animate({
 "left":-oneWidth*iNow, //注意此处用到left属性,所以ul的样式里面需要设置position: relative; 让ul左移N个图片大小的宽度,N根据被点击的按钮索引值index确定
 })
 });
 
 timer=setInterval(function(){ //打开定时器
 iNow++;  //让图片的索引值次序加1,这样就可以实现顺序轮播图片
 if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
 iNow=0;
 }
 showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
 },2000); //2000为轮播的时间
})

上面的注释写的很详细了,主要是为了方便想学习的小伙伴看,但是实际上我写程序不会注释的那么详细,都是很简单的内容啦,看到这里你可能以为jQuery程序就完了,那就大错特错了,因为自动轮播效果是正确的,但是手动点击时就会出错,我特意做了一段Gif动画展示出错的效果:

jquery实现定时自动轮播特效

看到上面的效果你就会忽然大悟,图片自动轮播时,你就算点击按钮它也只是附和你一下,跳转到你点击的按钮,但是仅仅持续一会还是按它轮播的次序,不理会你点击的按钮后应该走的轮播次序,至于原因嘛

是因为手动点击时index的值未赋值给定时器的图片索引iNow,这样iNow就无法存储你点击的按钮索引值,也就是不知道你点击的哪个按钮,既然知道了原因,那么下面就需要进行修改了。

修改完成后的jQuery程序最终版就是:

$(document).ready(function(){
 var slideShow=$(".slideShow"), //获取最外层框架的名称
 ul=slideShow.find("ul"), 
 showNumber=slideShow.find(".showNav span"),//获取按钮
 oneWidth=slideShow.find("ul li").eq(0).width(); //获取每个图片的宽度
 var timer=null; //定时器返回值,主要用于关闭定时器
 var iNow=0; //iNow为正在展示的图片索引值,当用户打开网页时首先显示第一张图,即索引值为0
 
 showNumber.on("click",function(){ //为每个按钮绑定一个点击事件 
 $(this).addClass("active").siblings().removeClass("active"); //按钮点击时为这个按钮添加高亮状态,并且将其他按钮高亮状态去掉
 var index=$(this).index(); //获取哪个按钮被点击,也就是找到被点击按钮的索引值
 iNow=index;
 ul.animate({
 "left":-oneWidth*iNow, //注意此处用到left属性,所以ul的样式里面需要设置position: relative; 让ul左移N个图片大小的宽度,N根据被点击的按钮索引值iNOWx确定
 })
 });
 
 timer=setInterval(function(){ //打开定时器
 iNow++;  //让图片的索引值次序加1,这样就可以实现顺序轮播图片
 if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
 iNow=0;
 }
 showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
 },2000); //2000为轮播的时间
})

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

以上就是本文的全部内容,下次就为大家分享鼠标悬浮在轮播图上方时图片停止轮播,鼠标移走后图片接着进行轮播的代码,不要走开。

Javascript 相关文章推荐
犀利的js 函数集合
Jun 11 Javascript
javascript中的void运算符语法及使用介绍
Mar 10 Javascript
在js文件中如何获取basePath处理js路径问题
Jul 10 Javascript
JS不能跨域借助jquery获取IP地址的方法
Aug 20 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
三种带箭头提示框总结实例
Jun 14 Javascript
Vuex模块化实现待办事项的状态管理
Mar 15 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
May 05 jQuery
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
webpack4+react多页面架构的实现
Oct 25 Javascript
js实现车辆管理系统
Aug 26 Javascript
jQuery手动点击实现图片轮播特效
Apr 20 #Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 #Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 #Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 #Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 #Javascript
js实现新年倒计时效果
Dec 10 #Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 #Javascript
You might like
JAVA/JSP学习系列之四
2006/10/09 PHP
php读取mysql的简单实例
2014/01/15 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP如何将XML转成数组
2016/04/04 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
法学毕业生自我鉴定
2013/11/08 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
股东协议书
2014/04/14 职场文书
食品安全承诺书范文
2014/08/29 职场文书
七一讲话心得体会
2014/09/05 职场文书