x-radish
(function ($) {
  $.fn.extend({
    /*
     * @description slider
     *
     */
    slider: function (opt) {
      var that = this,
        opt = opt || {},
        type = opt.type || \'fade\', //动画类型
        time = opt.time || 6000,//间隔时间
        $list = $(that).find(\'.i\'), //元素的dom
        $index = $(that).find(\'.index ul\'),//索引的dom
        length = $list.length, //元素的长度
        currIndex = 0, //
        slideFunc = getSlideFunc(type),
        runner = slideFunc ? setInterval(slideFunc, time) : function () {
          return false;
        };
      appendIndex(length);
      //鼠标悬停事件
      $(that).hover(function () {
        clearInterval(runner);
      }, function () {
        runner = setInterval(slideFunc, time);
      });
      function getSlideFunc(type) {
        var slideFunc;
        switch (type) {
          case \'fade\':
            slideFunc = function () {
              $list.eq(currIndex).fadeIn(\'normal\').css(\'display\', \'block\');
              $index.find(\'.on\').removeClass(\'on\').addClass(\'off\');
              for(var i = 0; i < length; i++) {
                if (i !== currIndex) {
                  $list.eq(i).css(\'display\', \'none\');
                }else{
                  $index.find(\'li\').eq(i).removeClass(\'off\').addClass(\'on\');
                }
              }
              currIndex = (++currIndex) % length;
            };
            break;
        }
        return slideFunc;
      }
      //添加索引
      function appendIndex(length) {
        var htmlStr = \'<li class="on"></li>\';
        for(var i = 0; i < length-1; i++) {
          htmlStr += \'<li class="off"></li>\';
        }
        $index.html(htmlStr);
      }
    }
  });
})(jQuery);

  

(function($){
    $.fn.ckSlide = function(opts){
        opts = $.extend({}, $.fn.ckSlide.opts, opts);
        this.each(function(){
            var slidewrap = $(this).find(\'.ck-slide-wrapper\');
            var slide = slidewrap.find(\'li\');
            var count = slide.length;
            var that = this;
            var index = 0;
            var time = null;
            $(this).data(\'opts\', opts);
            // next
            $(this).find(\'.ck-next\').on(\'click\', function(){
                if(opts[\'isAnimate\'] == true){
                    return;
                }
                
                var old = index;
                if(index >= count - 1){
                    index = 0;
                }else{
                    index++;
                }
                change.call(that, index, old);
            });
            // prev
            $(this).find(\'.ck-prev\').on(\'click\', function(){
                if(opts[\'isAnimate\'] == true){
                    return;
                }
                
                var old = index;
                if(index <= 0){
                    index = count - 1;
                }else{                                      
                    index--;
                }
                change.call(that, index, old);
            });
            $(this).find(\'.ck-slidebox li\').each(function(cindex){
                $(this).on(\'click.slidebox\', function(){
                    change.call(that, cindex, index);
                    index = cindex;
                });
            });
            
            // focus clean auto play
            $(this).on(\'mouseover\', function(){
                if(opts.autoPlay){
                    clearInterval(time);
                }
                $(this).find(\'.ctrl-slide\').css({opacity:0.6});
            });
            //  leave
            $(this).on(\'mouseleave\', function(){
                if(opts.autoPlay){
                    startAtuoPlay();
                }
                $(this).find(\'.ctrl-slide\').css({opacity:0.15});
            });
            startAtuoPlay();
            // auto play
            function startAtuoPlay(){
                if(opts.autoPlay){
                    time  = setInterval(function(){
                        var old = index;
                        if(index >= count - 1){
                            index = 0;
                        }else{
                            index++;
                        }
                        change.call(that, index, old);
                    }, 2000);
                }
            }
            // 修正box
            var box = $(this).find(\'.ck-slidebox\');
            box.css({
                \'margin-left\':-(box.width() / 2)
            })
            // dir
            switch(opts.dir){
                case "x":
                    opts[\'width\'] = $(this).width();
                    slidewrap.css({
                        \'width\':count * opts[\'width\']
                    });
                    slide.css({
                        \'float\':\'left\',
                        \'position\':\'relative\'
                    });
                    slidewrap.wrap(\'<div class="ck-slide-dir"></div>\');
                    slide.show();
                    break;
            }
        });
    };
    function change(show, hide){
        var opts = $(this).data(\'opts\');
        if(opts.dir == \'x\'){
            var x = show * opts[\'width\'];
            $(this).find(\'.ck-slide-wrapper\').stop().animate({\'margin-left\':-x}, function(){opts[\'isAnimate\'] = false;});
            opts[\'isAnimate\'] = true
        }else{
            $(this).find(\'.ck-slide-wrapper li\').eq(hide).stop().animate({opacity:0});
            $(this).find(\'.ck-slide-wrapper li\').eq(show).show().css({opacity:0}).stop().animate({opacity:1});
        }
       
        $(this).find(\'.ck-slidebox li\').removeClass(\'current\');
        $(this).find(\'.ck-slidebox li\').eq(show).addClass(\'current\');
    }
    $.fn.ckSlide.opts = {
        autoPlay: false,
        dir: null,
        isAnimate: false
    };
})(jQuery);

  

分类:

技术点:

相关文章: