如何自定义Twitter Bootstrap popover隐藏动画

时间:2014-02-11 11:43:32

标签: javascript jquery twitter-bootstrap

我想实现自己的popover hide动画。目前,我正在修改bootstrap.js。

$.fn.popover = function (option) {
            return this.each(function () {
                var $this = $(this)
                  , data = $this.data('popover')
                  , options = typeof option == 'object' && option
                if (!data) $this.data('popover', (data = new Popover(this, options)))

                //original code
                // if (typeof option == 'string') data[option]()
                //custom code
                if (typeof option == 'string') {
                    if (option === 'hide') {
                        //my customize animation here
                    }
                    else {
                        data[option]();
                    }

                }

            })
        }

我想知道是否还有,所以当我初始化popover时我可以实现动态动画

$('#target').popover({
    hide: function () {
        //my own animation
    }
});

1 个答案:

答案 0 :(得分:8)

好问题 - 脑筋急转弯!你绝对可以做到。看一下如何在不破坏原始源代码的情况下扩展插件:

$.fn.popover = function (orig) {
  return function(options) {
    return this.each(function() {
      orig.call($(this), options);
      if (typeof options.hide == 'function') {
        $(this).data('bs.popover').hide = function() {
          options.hide.call(this.$tip, this);
          orig.Constructor.prototype.hide.call(this);
        };
      }
    });
  }
}($.fn.popover);

我们走吧!我们使用自己的扩展功能扩展了默认弹出框。现在让我们使用它:

$('.three').popover({
  placement: 'bottom',
  hide: function() {
    $(this).animate({marginTop: -100}, function() {
      $(this).css({marginTop: ''});
    });
  }
});

上面的popover会在隐藏时具有自定义动画效果。

当然,如果您不提供hide选项,则会有默认行为。

演示: http://jsfiddle.net/VHDwa/71/