bootstrap源码学习与示例:bootstrap-popover
bootstrap-popover是bootstrap-toolbar的子类。它就比toolbar多一个content参数,其他就是一些默认值不同。与toolbar一样没有自定义事件。
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
| animation | 布尔值 | true | 为弹出提示添加一个淡入的过渡。 |
| placement | 字符串或函数 | 'right' | 弹出提示的位置:top | bottom | left | right。 |
| selector | 字符串 | false | 如果提供了selector,将对符合条件的某个或多个元素启用工具提示。 |
| trigger | 字符串 | 'hover' | 弹出提示的触发方式:鼠标经过(hover) | 获得焦点(focus) | 手动触发(manual) |
| title | 字符串或函数 | '' | 如果元素没有指定'title'属性,就使用该值做为默认的标题。 |
| content | 字符串或函数 | '' | 如果元素没有指定'data-content'属性,就使用该值做为默认的内容。 |
| delay | 数字或对象 | 0 |
显示和隐藏时的延迟时间(以毫秒计) 如果提供的是一个数字,延迟就会同时被应用到显示和隐藏。 如果是一个对象,其结构就是: |
不过最近2.2.3有点奇怪,它默认的触发事件是点击。
由于是子类,因此引入JS,至少引入四个JS文件:jquery库,bootstrap-transition.js,bootstrap-tooltip.js与bootstrap-popover.js
!function ($) {
"use strict"; // jshint ;_;
/* POPOVER PUBLIC CLASS DEFINITION
* =============================== */
var Popover = function (element, options) {
this.init('popover', element, options)
}
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
========================================== */
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
constructor: Popover
,
setContent: function () {
var $tip = this.tip()//取得模板
, title = this.getTitle()//取得标题
, content = this.getContent()//取得正文
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
//移除原先的所有位置与特效的类名
$tip.removeClass('fade top bottom left right in')
}
,
hasContent: function () {
return this.getTitle() || this.getContent()
}
,
getContent: function () {
var content
, $e = this.$element
, o = this.options
content = $e.attr('data-content')
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
return content
}
,
tip: function () {
if (!this.$tip) {
this.$tip = $(this.options.template)
}
return this.$tip
}
,
destroy: function () {
this.hide().$element.off('.' + this.type).removeData(this.type)
}
})
/* POPOVER PLUGIN DEFINITION
* ======================= */
var old = $.fn.popover
$.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)))
if (typeof option == 'string') data[option]()
})
}
$.fn.popover.Constructor = Popover
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
placement: 'right'
,
trigger: 'hover'
,
content: ''//模板结构比tooltip复杂一点,用于放置更多的内容
,
template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>'
})
/* POPOVER NO CONFLICT
* =================== */
$.fn.popover.noConflict = function () {
$.fn.popover = old
return this
}
}(window.jQuery);
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
浙公网安备 33010602011771号