jQuery插件boxScroll实现图片轮播特效


Posted in Javascript onJuly 14, 2015

BoxScroll

      常见图片轮播效果的简单实现。可以数字列表控制或者左右按键控制。逻辑很简单,到了尽头得往回跑,看看注释就知道了。

      代码如下:

HTML

<!doctype html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="" name="keywords" />
<meta content="" name="description" />
<meta name="author" content="codetker" />
<head>
<title>简易图片轮播插件</title>
<link href="style/reset.css" rel="stylesheet" type="text/css">
<link href="style/style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/jquery.codetker.boxScroll.js"></script>
</head>

<body>
  <div class="wrap">
    <div class="scrollBox">
      <div class="picOuterBox boxStyle">
        <div class="arrow arrowLeft">ToLeft</div>
        <div class="arrow arrowRight">ToRight</div>
        <ul class="picInnerBox boxStyle">
          <li>
            <a href="" title="">
              <img src="images/test.jpg" alt="">
            </a>
          </li>
          <li>
            <a href="" title="">
              <img src="images/test.jpg" alt="">
            </a>
          </li>
          <li>
            <a href="" title="">
              <img src="images/test.jpg" alt="">
            </a>
          </li>
          <li>
            <a href="" title="">
              <img src="images/test.jpg" alt="">
            </a>
          </li>
          <li>
            <a href="" title="">
              <img src="images/test.jpg" alt="">
            </a>
          </li>
        </ul>
      </div>
      <div class="picControl">
        <ul>
          <li class="liSelected">1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
        </ul>
      </div>
    </div>
  </div>
<script type="text/javascript">
  $(document).ready(function(){
    $(".scrollBox").boxScroll();
  });
</script>
</body>
</html>

CSS

@charset "utf-8";
/* CSS Document */
body{
  margin:0 0;
  padding:0 0;
  height:100%;
  width:100%;
}
.wrap{
  font-family:"微软雅黑","宋体", Times, "Times New Roman", serif;
  font-size:14px;
  margin:0 0;
  padding:0 0;
  height:100%;
  width:100%;
  overflow:hidden;
}
.boxStyle{/*照片大小*/
  width: 500px;
  height: 256px;
}
.scrollBox{
  position: relative;
  width: 500px;
  margin: 0 auto;
}
.picInnerBox{
  width: 10000px;/*足够大能放下即可,如果需要上下滚动,改height*/
  overflow: hidden;
}
.picInnerBox li{
  cursor: pointer;
  float: left;
}
.picOuterBox{
  overflow: hidden;

}
.arrow{
  position: absolute;
  top: 45%;
  height: 40px;
  cursor: pointer;
  z-index: 99;    
}
.arrow:hover{
  color: #fff;
}
.arrowLeft{
  float: left;
  left: 5%;
}
.arrowRight{
  float: right;
  right: 5%;
}
.picControl{
  overflow: auto;
  width: 100px;
  margin: 0 auto;
}
.picControl ul li{
  cursor: pointer;
  float: left;
  width: 20px;
  height: 20px;
  text-align: center;
}
.picControl ul li:hover{
  color:red;
}
.liSelected{
  color: red;
}

JavaScript

/*
 * boxScroll 0.1
 * 兼容等常见浏览器
 */
 ;(function($,window,document,undefined){
   //定义构造函数
   var BoxObj=function(ele,opt){
     this.$element=ele; //最外层对象
     this.defaults={
       'style': 0 ,//滚动样式选择,默认为普通效果
       'speed': 1 ,//默认为1s
       'direction': 'left',//默认为向左边滚动
       'toLeft':$(ele).children('.picOuterBox').children('.arrowLeft'),//默认格式下重要位置
       'toRight':$(ele).children('.picOuterBox').children('.arrowRight'),
       'ControlUl':$(ele).children('.picControl').children('ul')
     },
   
     this.options=$.extend({},this.defaults,opt );
     //这里可以添加一些通用方法  
   }

   //给构造函数添加方法
   BoxObj.prototype={

       commonScroll:function(){
       //接收对象属性
       var boxWindow=$(this.$element).children('.picOuterBox').children('.picInnerBox');
       var speed=this.defaults.speed;
       var style=this.defaults.style;
       var direction=(this.defaults.direction=='left')? 1 : -1;
       var toLeft=this.defaults.toLeft;
       var toRight=this.defaults.toRight;
       var Control=this.defaults.ControlUl;

       var boxWidth=$(boxWindow).children('li').width();
       var imgIndexMax=$(boxWindow).children('li').length;
       var imgIndex;
       function getImgIndex(){//判断当前图片的位置
         imgIndex=Math.round(parseInt($(boxWindow).css("margin-left"))*(-1)/boxWidth);
       }

       var timer;//必须在外面定义保证全局针对这一功能只有这一个计时器
       timer=setInterval(function(){
         boxScroll(imgIndex,direction);
       },5000);

       function rest(){
         clearInterval(timer);
        timer=setInterval(function(){
           boxScroll(imgIndex,direction);
         },5000);
       }

       //绑定点击按钮
       $(Control).delegate('li', 'click', function() {
         boxScroll($(this).index(),0);
         rest();
       });

       //绑定左右按钮
       $(toLeft).click(function() {
         boxScroll(0,-1);
         rest();
       });
       $(toRight).click(function() {
         boxScroll(0,1);
         rest();
       });

       function boxScroll(index,dir){
         if (!$(boxWindow).is(':animated')) {//当ul窗口没有在动时
           if(!dir){//响应ul li control操作
             //此时dir=0,则依靠传入的imgIndex
             imgIndex=index;
             //其它时候dir!=0,则依靠dir
           }else{//响应toLeft和toRight
             if(dir==1){//向右动
               getImgIndex();
               if (imgIndex==(imgIndexMax-1)) {
                 imgIndex=0;

               }else{
                 imgIndex+=1;
               }
             }else{//向左动
               getImgIndex();
               if (imgIndex==0) {
                 imgIndex=(imgIndexMax-1);
               }else{
                 imgIndex-=1;
               }
             }
           }
           $(Control).children('li').eq(imgIndex).addClass('liSelected');
           $(Control).children('li').eq(imgIndex).siblings().removeClass('liSelected');
           $(boxWindow).animate({
               "margin-left":imgIndex*boxWidth*(-1)+'px'
             }, 1000*speed);
         }
       }
     }
   }

   //在插件中使用windowObj对象的方法,0为vertical,1为horizontal
   $.fn.boxScroll=function(options){
     //创建实体
     var boxObj=new BoxObj(this,options);
     //用尾调的形式调用对象方法
     return boxObj.commonScroll();
   }
 })(jQuery,window,document);

      详细下载参见https://github.com/codetker/myBoxScroll。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
doctype后如何获得body.clientHeight的方法
Jul 11 Javascript
jquery 应用代码 方便的排序功能
Feb 06 Javascript
基于jquery实现状态限定编辑的代码
Feb 11 Javascript
用IE重起计算机或者关机的示例代码
Mar 10 Javascript
基于javascript实现单选及多选的向右和向左移动实例
Jul 25 Javascript
程序员必知35个jQuery 代码片段
Nov 05 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
Angular实现购物车计算示例代码
Feb 21 Javascript
vue使用jsonp抓取qq音乐数据的方法
Jun 21 Javascript
Vue刷新修改页面中数据的方法
Sep 16 Javascript
js设置默认时间跨度过程详解
Jul 17 Javascript
Vue使用v-viewer实现图片预览
Oct 21 Javascript
jQuery自动添加表单项的方法
Jul 13 #Javascript
JavaScript去除数组里重复值的方法
Jul 13 #Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
Jul 13 #Javascript
jQuery检测返回值的数据类型
Jul 13 #Javascript
jQuery常用且重要方法汇总
Jul 13 #Javascript
C#中使用迭代器处理等待任务
Jul 13 #Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 #Javascript
You might like
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
Knockoutjs快速入门(经典)
2012/12/24 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
进一步理解Python中的函数编程
2015/04/13 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
python关闭占用端口方式
2019/12/17 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python re模块常见用法例举
2021/03/01 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
医院辞职信范文
2014/01/17 职场文书
个人作风剖析材料
2014/02/02 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
python三子棋游戏
2022/05/04 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android