基于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 相关文章推荐
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
谈谈JavaScript自定义回调函数
Oct 18 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
Sep 20 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
Vue三层嵌套路由的示例代码
May 05 Javascript
Node.js + express基本用法教程
Mar 14 Javascript
layui之table checkbox初始化时选中对应选项的方法
Sep 02 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
Sep 17 Javascript
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学习记录之数组函数
2018/06/01 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
vue-loader教程介绍
2017/06/14 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python列表删除的三种方法代码分享
2017/10/31 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
django 实现简单的插入视频
2020/04/07 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
介绍一下Linux文件的记录形式
2013/09/29 面试题
领导班子四风对照检查材料范文
2014/09/27 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
2014年党建工作总结
2014/11/11 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript