2015-05-25 3 views
1

Эй, ребята, я как раз собирался через carasoul.js код и наткнулся на следующие строки кода:использование isDefaultPrevented() с пользовательскими событиями

if (slideEvent.isDefaultPrevented()) return 

теперь документация isDefaultPrevented() дает пример foolowing:

$("a").click(function(event) { 
    alert(event.isDefaultPrevented()); // false 
    event.preventDefault(); 
    alert(event.isDefaultPrevented()); // true 
}); 

, но я не прикрепляю click event, так как есть isDefaultPrevented от каких-либо передач? , Весь код функции можно увидеть ниже ::

Carousel.prototype.slide = function (type, next) { 
    var $active = this.$element.find('.item.active') 
    var $next  = next || this.getItemForDirection(type, $active) 
    var isCycling = this.interval 
    var direction = type == 'next' ? 'left' : 'right' 
    var that  = this 

    if ($next.hasClass('active')) return (this.sliding = false) 

    var relatedTarget = $next[0] 
    var slideEvent = $.Event('slide.bs.carousel', { 
     relatedTarget: relatedTarget, 
     direction: direction 
    }) 
    this.$element.trigger(slideEvent) 
    if (slideEvent.isDefaultPrevented()) return 

    this.sliding = true 

    isCycling && this.pause() 

    if (this.$indicators.length) { 
     this.$indicators.find('.active').removeClass('active') 
     var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) 
     $nextIndicator && $nextIndicator.addClass('active') 
    } 

    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" 
    if ($.support.transition && this.$element.hasClass('slide')) { 
     $next.addClass(type) 
     $next[0].offsetWidth // force reflow 
     $active.addClass(direction) 
     $next.addClass(direction) 
     $active 
     .one('bsTransitionEnd', function() { 
      $next.removeClass([type, direction].join(' ')).addClass('active') 
      $active.removeClass(['active', direction].join(' ')) 
      that.sliding = false 
      setTimeout(function() { 
      that.$element.trigger(slidEvent) 
      }, 0) 
     }) 
     .emulateTransitionEnd(Carousel.TRANSITION_DURATION) 
    } else { 
     $active.removeClass('active') 
     $next.addClass('active') 
     this.sliding = false 
     this.$element.trigger(slidEvent) 
    } 

    isCycling && this.cycle() 

    return this 
    } 

Почему использование isDefaultPrevented()?

ответ

1

Карусель Bootstrap запускает события в интересные моменты, например, до и после его скольжения. Если вы хотите сделать что-то, когда эти события происходят, вы можете реагировать на них так:

$('.carousel').on('slide.bs.carousel', function (e) { 
    // do something before a carousel slides 
}); 

И если вы хотите, чтобы предотвратить карусель от его поведения по умолчанию, вы можете сделать это следующим образом:

$('.carousel').on('slide.bs.carousel', function (e) { 
    // prevent the carousel from sliding 
    e.preventDefault(); 
}); 

Bootstrap затем проверяет, если обработчик события, вызываемый preventDefault() и останавливает его поведение по умолчанию, если это произошло:

if (slideEvent.isDefaultPrevented()) return 
Смежные вопросы