基于JQuery实现图片轮播效果(焦点图)


Posted in Javascript onFebruary 02, 2016

自己写了一个纯jq形式的横向轮播焦点图,可点击小圆点或者左右按钮进行切换,属于定宽类型。改成自适应宽度的也不难,将css里面的bannerCon宽度改为百分比,再在js里面将ul和li的宽度跟随父级容器的宽度变化即可,需要用到$(window).resize。

兼容到IE6+以上浏览器,有轮播速度和切换间隔两个参数可以改。

效果图如下:

基于JQuery实现图片轮播效果(焦点图)

Html代码如下:

<html>
<head>
 <meta charset="utf-8">
 <title>banner图</title>
 <link href="css/style.css" rel="stylesheet"/>
 <script src="js/jquery-1.9.1.min.js"></script>
 <script src="js/common.js"></script>
</head>
<body>
 <div class="wrap">
 <div class="banner">
 <div class="bannerCon">
 <ul class="imgList">
  <li><a href="#"><img src="images/banner01.jpg" alt=""/></a></li>
  <li><a href="#"><img src="images/banner02.jpg" alt=""/></a></li>
  <li><a href="#"><img src="images/banner03.jpg" alt=""/></a></li>
 </ul>
 <ul class="btnList clearfix">
  <li class="cur"><span></span></li>
  <li><span></span></li>
  <li><span></span></li>
 </ul>
 <span class="pre-nex prev"><</span> 
 <span class="pre-nex next">></span> 
 </div>
 </div>
 </div>
</body>
</html>

Css样式如下:

@charset "utf-8";
/* 简单reset */
body, p, ul, ol, li {
 margin: 0;
 padding: 0;
}
ul, ol {
 list-style: none;
}
img { border:none; }
a,button{ outline: none; }
.clearfix:after {
 visibility: hidden;
 display: block;
 font-size: 0;
 content: " ";
 clear: both;
 height: 0;
} 
/* 具体样式 */
.banner {
 position: relative;
 height: 400px;
 overflow: hidden;
}
.banner .bannerCon {
 position: absolute;
 top: 0;
 left: 50%;
 width: 800px;
 height: 400px;
 margin-left: -400px;
 overflow: hidden;
}
.bannerCon .imgList {
 position: absolute;
 top: 0;
 left: 0;
 width: 99999px;
 height: 400px;
}
.bannerCon .imgList li {
 float: left;
 width: 800px;
 height: 400px;
}
.bannerCon .imgList li a {
 position: relative;
 display: block;
 height: 100%;
}
.bannerCon .imgList li img {
 width: 800px;
 height: 400px;
}
.bannerCon .pre-nex {
 display: none;
 position: absolute;
 top: 50%;
 width: 40px;
 height: 60px;
 margin-top: -40px;
 font: bold 40px/60px Simsun;
 color: #ccc;
 text-align: center;
 border:none;
 background: rgba(0,0,0,.30);
 filter:progid:DXImageTransform.Microsoft.Gradient(startColorStr=#4c000000, endColorStr=#4c000000);
 cursor: pointer;
 z-index: 3;
}
.bannerCon .pre-nex.show { display: inline-block; }
.bannerCon .prev { left: 13%; }
.bannerCon .next { right: 13%; }
.bannerCon .btnList {
 position: absolute;
 left: 0;
 bottom: 20px;
 width: 100%;
 height: 12px;
 text-align:center;
 z-index: 2;
 _overflow: hidden;
}
.bannerCon .btnList li { display: inline; }
.bannerCon .btnList li span {
 display: inline-block;
 width: 12px;
 height: 12px;
 margin: 0 5px;
 border-radius: 6px;
 background-color:#14829e;
 cursor: pointer;
}
.bannerCon .btnList li.cur span { background-color: #f30; }

Js代码如下:

//加载在文本读取之后的js语句 开始 =============================================================
 function Scroll(obj,speed,interval){ //父级容器,轮播速度,切换间隔
 $("."+obj).each(function(){
  var $box = $(this),
  $imgUl = $box.children(".imgList"),
  $imgLi = $imgUl.children("li"),
  $btnUl = $box.children(".btnList"),
  $btnLi = $btnUl.children("li"),
  $btnPreNex = $box.children(".pre-nex"),
  $btnPre = $box.children(".prev"),
  $btnNex = $box.children(".next"),
  n = $imgLi.length,
  width = $imgLi.width(),
  left = parseFloat($imgUl.css("left")),
  k = 0,
  Player;
  $imgUl.css("width",n*width);
  function scroll(){  //轮播事件
  $imgUl.stop().animate({left:-width},speed,function(){
   k += 1;
   $imgUl.css("left",0);
   $imgUl.children("li:first").appendTo($(this));
   $btnLi.removeClass('cur');
   if(k >= n){
   k = 0;
   }
   $btnUl.children("li").eq(k).addClass('cur');  
  });
  }
  $btnLi.click(function(){  //小圆点点击事件
  var index = $btnLi.index(this); 
  $(this).addClass('cur').siblings("li").removeClass('cur');
  if(index >= k){
   var dif = index-k;
   left = -dif*width;
   $imgUl.stop().animate({left:left},speed,function(){
   $imgUl.css("left",0);
   $imgUl.children("li:lt("+dif+")").appendTo($imgUl); 
   });
  }
  else{
   var j = n-(k-index);
   $imgUl.css("left",(index-k)*width);
   $imgUl.children("li:lt("+j+")").appendTo($imgUl);
   $imgUl.stop().animate({left:0},speed); 
  }
  k = index;
  }); 
  $btnPreNex.click(function(){ //左右按钮点击事件
  var index = $btnLi.index(this); 
  if($(this).hasClass('next')){
   if(!$imgUl.is(":animated")){
   k += 1;
   $imgUl.animate({left:-width},speed,function(){
    $imgUl.css("left",0);
    $imgUl.children("li:first").appendTo($(this));
    if(k >= n){
    k = 0;
    }
    $btnUl.children("li").removeClass('cur').eq(k).addClass('cur');
   });
   }
  }
  else {
   if(!$imgUl.is(":animated")){
   k += -1;
   $imgUl.css("left",-width);
   $imgUl.children("li:last").prependTo($imgUl);
   $imgUl.stop().animate({left:0},speed);
   if(k < 0){
    k = n-1;
   }
   $btnUl.children("li").removeClass('cur').eq(k).addClass('cur');
   }
  }
  }); 
  $box.hover(   //鼠标移入、移出事件
  function(){
   clearInterval(Player);
   $btnPreNex.addClass('show');
  },
  function(){
   Player = setInterval(function(){scroll()},interval);
   $btnPreNex.removeClass('show');
  }
  );
  Player = setInterval(function(){scroll()},interval);
 });
 } 
 $(function () {    //读取轮播事件
 Scroll("bannerCon",600,4000);
 });

注意加载一下jq库,我用的是1.9.1的,其实1.7+的都没问题的。

更多精彩内容大家还可以参考《jQuery焦点图特效汇总》进行学习,希望大家喜欢。

更多关于轮播图效果的专题,请点击下方链接查看学习

以上就是本文的全部内容,希望能够帮助大家。

Javascript 相关文章推荐
拖动Html元素集合 Drag and Drop any item
Dec 22 Javascript
比较简单的异步加载JS文件的代码
Jul 18 Javascript
js获取指定的cookie的具体实现
Feb 20 Javascript
原生javascript获取元素样式
Dec 31 Javascript
javascript去除字符串左右两端的空格
Feb 05 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
Mar 19 Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 Javascript
vue 自定义组件添加原生事件
Apr 21 Vue.js
Hammer.js+轮播原理实现简洁的滑屏功能
Feb 02 #Javascript
JavaScript实现的MD5算法完整实例
Feb 02 #Javascript
javascript禁止超链接跳转的方法
Feb 02 #Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 #Javascript
Node.js实现JS文件合并小工具
Feb 02 #Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 #Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 #Javascript
You might like
php array_slice函数的使用以及参数详解
2008/08/30 PHP
浅析php工厂模式
2014/11/25 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
JavaScript的Function详细
2006/11/14 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
详解js闭包
2014/09/02 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android