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 相关文章推荐
Ubuntu 11.10 安装Node.js的方法
Nov 30 Javascript
js用闭包遍历树状数组的方法
Mar 19 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
Sep 02 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 Javascript
用svg制作富有动态的tooltip
Jul 17 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 jQuery
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
JS中this的指向以及call、apply的作用
May 06 Javascript
layui-table表复选框勾选的所有行数据获取的例子
Sep 13 Javascript
Vue 构造选项 - 进阶使用说明
Aug 14 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 02 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
Nov 13 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
ajax php 实现写入数据库
2009/09/02 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP7变量处理机制修改
2021/03/09 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
在Python中移动目录结构的方法
2016/01/31 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
详解Python用户登录接口的方法
2019/04/17 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
python实现超市商品销售管理系统
2019/11/22 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
产品销售计划书
2014/05/04 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
实习生个人总结范文
2015/02/28 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
python scrapy简单模拟登录的代码分析
2021/07/21 Python
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android