zoukankan      html  css  js  c++  java
  • jq插件处女座 图片轮播

    好久没写博客了,变得好懒呀,无地自容。最近一直在学sass和jq插件的写法,照猫画虎的谢了一个jq的插件,也算是第一次真正称得上插件的插件 ,废话不多说 上代码

    (function($) {   
    
        $.fn.carousel = function(options) {     
            if($(this).length==0)return false;
            var opts = $.extend({},$.fn.carousel.defaults,options);
            function Slide(o){
                this.o = o;
                this.box = o.find(opts['imgbox']);
                this.cirEle = this.box.find(opts['cirEle'])
                this.nav = o.find(opts['slideNav']);
                this.rightAr = o.find(opts['rightAr']);
                this.leftAr = o.find(opts['leftAr']);
                this.et = opts['eventType'];
                this.autoPlay = opts['autoPlay'];
                this.navClass = opts['navClass'];
                this.speed = opts['speed']
                this.timer = null;
                this.len = this.cirEle.length;
                this.cirNavEle = null;
                this.onOff = true;
                this.activeIndex = 0;
                this.iNow = 0;
                this.boxWidth = this.box.outerWidth()
    
            }
    
            Slide.prototype.init = function(){
                var _this = this;
                _this.createNav().togglePage();
                this.leftAr.on('click',function(){
                    _this.play(1);
                    
                })
                this.rightAr.on('click',function(){
                    _this.play();
                })
    
                if(this.autoPlay){
                    this.stop();
                    this.timer = setInterval(function(){
                        _this.play();
                    },this.speed[1]);
    
                    this.o.hover(function(){
                        _this.stop();
                    },function(){
                        _this.timer = setInterval(function(){
                            _this.play();
                        },_this.speed[1])
                    })
                    
                }
            }
            Slide.prototype.createNav = function(){
                var _this = this;
                var arr = [];
                $.each(_this.cirEle,function(i,n){
                    if(i == 0){
                        arr.push('<span class="cur">'+ (i+1) +'</span>');
                    }else{                   
                        arr.push('<span>'+ (i+1) +'</span>');
                         _this.cirEle.eq(i).css({'left':_this.boxWidth});
                    }
    
                });
    
                _this.nav.html(arr.join(''));
                this.cirNavEle = _this.nav.find('span');
                return this;
    
            }
            Slide.prototype.togglePage = function(){
                var _this = this;
                this.cirNavEle.on(_this.et,function(){
                    if(_this.onOff){
                        _this.onOff = false;
                        
                        _this.activeIndex = $(this).index(); 
                        
                        $(this).addClass(_this.navClass).siblings().removeClass(_this.navClass);              
                    
                        if(_this.activeIndex > _this.iNow){
                            _this.toggleRight();
                            
                        }else if( _this.activeIndex < _this.iNow ){
                            _this.toggleLeft();
                        } 
                        _this.cirEle.eq(_this.activeIndex).animate({'left':0},_this.speed[0],function(){                       
                               _this.onOff = true;
                               $(this).css({'z-index':1}).siblings().css({'z-index':0})
                        })
                        
                        _this.iNow = _this.activeIndex;
                    }
                })
    
                return this;
                
    
            }
            Slide.prototype.toggleLeft= function(){
                var _this = this;
                _this.cirEle.eq(_this.activeIndex).css({'left':-_this.boxWidth})                       
                _this.cirEle.eq(_this.iNow).animate({'left':_this.boxWidth},_this.speed[0])
            }
             Slide.prototype.toggleRight= function(){
                 var _this = this;
                _this.cirEle.eq(_this.activeIndex).css({'left':_this.boxWidth})                        
                _this.cirEle.eq(_this.iNow).animate({'left':-_this.boxWidth},_this.speed[0])
            }
            
            Slide.prototype.play = function(dir){
                var _this = this;
                if(_this.onOff){
                    _this.onOff = false;
                    if(!dir){
                        _this.activeIndex++;
                        _this.activeIndex %= _this.len;
                        _this.toggleRight();
                       
                    }else{
                        _this.activeIndex--;
                        if(_this.activeIndex <= 0){
                            _this.activeIndex = 0;
                        }
                        _this.toggleLeft();
                       
                    }  
    
                    _this.cirEle.eq(_this.activeIndex).animate({'left':0},_this.speed[0],function(){                       
                            _this.onOff = true;
                            _this.iNow = _this.activeIndex;
                            _this.cirNavEle.eq(_this.activeIndex).addClass(_this.navClass).siblings().removeClass(_this.navClass); 
                            $(this).css({'z-index':1}).siblings().css({'z-index':0})  
                    })
                   
                }
    
            }
            Slide.prototype.stop = function(){
                clearInterval(this.timer);
            }
    
    
            return this.each(function () {
                   var $this = $(this);
                   var obj = new Slide($this);
                   obj.init();
            });
    
        };     
    
    
    
        //默认配置
        $.fn.carousel.defaults = {
            'imgbox' : '.carousel-box',     //滚动元素父容器
            'cirEle' : 'li',              //滚动元素
            'slideNav' : '.carousel-nav',    //图片索引菜单
            'autoPlay' : true,                //是否自动轮播
            'rightAr' : '.arR',                //下一张
            'leftAr' : '.arL',                //上一张
            'speed':[500,3000],                //速度  一张显示出来的时间, 间隔时间
            'eventType' : 'click',            //切换方式
            'navClass' : 'cur'                //当前菜单高亮css
    
        }
    })(jQuery); 

    HTML

    <div class="area">
        <div class="carousel-box">
            <ul>
                <li><a href="#1"><img src="images/1.jpg" alt=""></a></li>
                <li><a href="#2"><img src="images/2.jpg" alt=""></a></li>
                <li><a href="#3"><img src="images/3.jpg" alt=""></a></li>
                <li><a href="#4"><img src="images/4.jpg" alt=""></a></li>
                <li><a href="#5"><img src="images/5.jpg" alt=""></a></li>
                <li><a href="#6"><img src="images/6.jpg" alt=""></a></li>
                <li><a href="#7"><img src="images/7.jpg" alt=""></a></li>
            </ul>
        </div>
        <div class="carousel-nav"></div>
        <span class="arL">&lt;</span>
        <span class="arR">&gt;</span>    
        
    </div>
    <script>
        $(function(){
            $('.area').carousel();
        })
    </script>

    css

    .area, .area .carousel-box {
      width: 310px; }
    
    .area .carousel-nav span, .area .arR, .area .arL {
      width: 20px;
      height: 20px;
      border: 1px solid #666;
      text-align: center;
      display: inline-block; }
    
    .area .carousel-box ul, .area .carousel-box li {
      position: absolute;
      left: 0;
      top: 0; }
    
    .area {
      margin: 50px auto; }
      .area .carousel-box {
        height: 350px;
        overflow: hidden;
        position: relative; }
      .area .carousel-nav span.cur {
        background: #000;
        color: #FFF; }
      .area .arR, .area .arL {
        margin-top: 20px; }
     

    现在回头想想,其实jq插件并不是想象的那么的难,难的还是在实现功能的思路上,写法和平常js也都差不多,上面现在只是简单的实现左右轮播,有时间把上下方向也加上,嘎嘎

  • 相关阅读:
    001-CH573F学习开发-硬件使用说明,下载和运行第一个程序
    1-HC32F460(华大)+BC260Y(NB-IOT)基本控制篇(自建物联网平台)-硬件使用说明
    2-HC32F460(华大)+Air724UG(4G GPRS)远程升级篇(自建物联网平台)-整体运行测试-HC32F460通过Air724UG(4G GPRS)使用http或https远程下载升级单片机程序(单片机程序轮训检查更新)
    2-HC32F460(华大)+Air724UG(4G GPRS)远程升级篇(自建物联网平台)-什么是http,怎么通过http下载文件数据,http分段下载
    2-HC32F460(华大)+Air724UG(4G GPRS)基本控制篇(自建物联网平台)-整体运行测试-微信小程序扫码绑定Air724,并通过MQTT和单片机实现远程通信控制
    2-HC32F460(华大)+Air724UG(4G GPRS)基本控制篇(自建物联网平台)-整体运行测试-Android扫码绑定Air724,并通过MQTT和单片机实现远程通信控制
    1-HC32F460(华大)+Air724UG(4G GPRS)基本控制篇(自建物联网平台)-硬件使用说明
    8-HC32F460(华大单片机)-串口(定时器空闲检测)
    7-HC32F460(华大单片机)-定时器Timer0
    6-HC32F460(华大单片机)-时钟树
  • 原文地址:https://www.cnblogs.com/icss/p/3795991.html
Copyright © 2011-2022 走看看