jquery实现鼠标悬浮停止轮播特效


Posted in Javascript onAugust 20, 2020

本文实例讲述了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>

二、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、当鼠标悬浮在框架上方时,清除定时器即用clearInterval(timer)关闭定时器,使自动轮播停止
  • 2、当鼠标离开框架上方时,重新启动定时器
  • 3、鼠标的悬浮和离开借助于hover函数

hover(over,out)一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态。

参数:

over (Function) : 鼠标移到元素上要触发的函数。
out (Function): 鼠标移出元素要触发的函数。

下面来看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根据被点击的按钮索引值iNow确定
  })
 });
 /*手动点击按钮进行图片轮播代码结束*/
 
 
 /*定时自动轮播图片代码开始*/
 timer=setInterval(function(){ //打开定时器
  iNow++;    //让图片的索引值次序加1,这样就可以实现顺序轮播图片
  if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
  iNow=0;
  }
  showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
 },2000); //2000为轮播的时间
 /*定时自动轮播图片代码结束*/
 
 /*鼠标悬浮图片停止轮播代码开始*/
 slideShow.hover(
  function(){
  clearInterval(timer);
  },function(){
  timer=setInterval(function(){ //打开定时器
   iNow++;    //让图片的索引值次序加1,这样就可以实现顺序轮播图片
   if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
   iNow=0;
   }
   showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
  },2000); //2000为轮播的时间
  }
 );
 /*鼠标悬浮图片停止轮播代码结束*/
})

从上图可以看出开启定时器的代码是重复的,所以这里可以定义一个自动播放的函数autoPlay()来精简代码,经过精简后的代码如下:

/*定时自动轮播图片代码开始*/
 function autoPlay(){
  timer=setInterval(function(){ //打开定时器
  iNow++;    //让图片的索引值次序加1,这样就可以实现顺序轮播图片
  if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
  iNow=0;
  }
  showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
  },2000); //2000为轮播的时间
 }
 autoPlay();
 /*定时自动轮播图片代码结束*/

定义完成后不要忘记调用这个函数,即autoPlay();
那么最终版的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根据被点击的按钮索引值iNow确定
  })
 });
 /*手动点击按钮进行图片轮播代码结束*/
 
 
 /*定时自动轮播图片代码开始*/
 function autoPlay(){
  timer=setInterval(function(){ //打开定时器
  iNow++;    //让图片的索引值次序加1,这样就可以实现顺序轮播图片
  if(iNow>showNumber.length-1){ //当到达最后一张图的时候,让iNow赋值为第一张图的索引值,轮播效果跳转到第一张图重新开始
  iNow=0;
  }
  showNumber.eq(iNow).trigger("click"); //模拟触发数字按钮的click
  },2000); //2000为轮播的时间
 }
 autoPlay();
 /*定时自动轮播图片代码结束*/
 
 /*鼠标悬浮图片停止轮播代码开始*/
 slideShow.hover(
  function(){
  clearInterval(timer);
  },autoPlay
 );
 /*鼠标悬浮图片停止轮播代码结束*/
})

以上就是本文的全部内容,大家可以结合下面这两篇文章进行学习:

文章一:jQuery手动点击实现图片轮播特效

文章二:jquery实现定时自动轮播特效

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

希望本文所述对大家学习jQuery程序设计有所帮助。

Javascript 相关文章推荐
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
Sep 12 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
Nov 01 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
Feb 08 Javascript
JS简单获得节点元素的方法示例
Feb 10 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
Apr 25 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
Aug 15 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 #Javascript
jquery实现定时自动轮播特效
Dec 10 #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
You might like
如何在PHP中进行身份认证
2006/10/09 PHP
php网站地图生成类示例
2014/01/13 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python面向对象特殊成员
2017/04/24 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
STP的判定过程
2012/10/01 面试题
初二政治教学反思
2014/01/12 职场文书
给护士表扬信
2014/01/19 职场文书
暑期培训随笔感言
2014/03/10 职场文书
助残日活动总结
2014/08/27 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
学习计划是什么
2019/04/30 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python