一、前言

这节介绍下popover(弹出框)模块的源码实现。

二、源码

1、popovers.less

 //// Popovers(弹出框)// --------------------------------------------------.popover {position: absolute;top: 0;left: 0;z-index: @zindex-popover;display: none;max-width: @popover-max-width;padding: 1px;// Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.// So reset our font and text properties to avoid inheriting weird values..reset-text();font-size: @font-size-base;background-color: @popover-bg;background-clip: padding-box;border: 1px solid @popover-fallback-border-color;border: 1px solid @popover-border-color;border-radius: @border-radius-large;.box-shadow(0 5px 10px rgba(0,0,0,.2));// Offset the popover to account for the popover arrow&.top     { margin-top: -@popover-arrow-width; }&.right   { margin-left: @popover-arrow-width; }&.bottom  { margin-top: @popover-arrow-width; }&.left    { margin-left: -@popover-arrow-width; }}.popover-title {margin: 0; // reset heading marginpadding: 8px 14px;font-size: @font-size-base;background-color: @popover-title-bg;border-bottom: 1px solid darken(@popover-title-bg, 5%);border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;}.popover-content {padding: 9px 14px;}// Arrows//// .arrow is outer, .arrow:after is inner.popover > .arrow {&,&:after {position: absolute;display: block;width: 0;height: 0;border-color: transparent;border-style: solid;}}.popover > .arrow {border-width: @popover-arrow-outer-width;}.popover > .arrow:after {border-width: @popover-arrow-width;content: "";}.popover {&.top > .arrow {left: 50%;margin-left: -@popover-arrow-outer-width;border-bottom-width: 0;border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallbackborder-top-color: @popover-arrow-outer-color;bottom: -@popover-arrow-outer-width;&:after {content: " ";bottom: 1px;margin-left: -@popover-arrow-width;border-bottom-width: 0;border-top-color: @popover-arrow-color;}}&.right > .arrow {top: 50%;left: -@popover-arrow-outer-width;margin-top: -@popover-arrow-outer-width;border-left-width: 0;border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallbackborder-right-color: @popover-arrow-outer-color;&:after {content: " ";left: 1px;bottom: -@popover-arrow-width;border-left-width: 0;border-right-color: @popover-arrow-color;}}&.bottom > .arrow {left: 50%;margin-left: -@popover-arrow-outer-width;border-top-width: 0;border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallbackborder-bottom-color: @popover-arrow-outer-color;top: -@popover-arrow-outer-width;&:after {content: " ";top: 1px;margin-left: -@popover-arrow-width;border-top-width: 0;border-bottom-color: @popover-arrow-color;}}&.left > .arrow {top: 50%;right: -@popover-arrow-outer-width;margin-top: -@popover-arrow-outer-width;border-right-width: 0;border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallbackborder-left-color: @popover-arrow-outer-color;&:after {content: " ";right: 1px;border-right-width: 0;border-left-color: @popover-arrow-color;bottom: -@popover-arrow-width;}}}

2、popover.js

 /* ========================================================================* Bootstrap: popover.js v3.3.7(弹出框)* http://getbootstrap.com/javascript/#popovers* ========================================================================* Copyright 2011-2016 Twitter, Inc.* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)* ======================================================================== */+function ($) {   'use strict';// POPOVER PUBLIC CLASS DEFINITION// ===============================var Popover = function (element, options) {this.init('popover', element, options)}if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')Popover.VERSION  = '3.3.7'Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {placement: 'right',trigger: 'click',content: '',template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'})// NOTE: POPOVER EXTENDS tooltip.js// ================================Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)Popover.prototype.constructor = PopoverPopover.prototype.getDefaults = function () {return Popover.DEFAULTS}Popover.prototype.setContent = function () {var $tip    = this.tip()var title   = this.getTitle()var content = this.getContent()$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js eventsthis.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'](content)$tip.removeClass('fade top bottom left right in')// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do// this manually by checking the contents.if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()}Popover.prototype.hasContent = function () {return this.getTitle() || this.getContent()}Popover.prototype.getContent = function () {var $e = this.$elementvar o  = this.optionsreturn $e.attr('data-content')|| (typeof o.content == 'function' ?o.content.call($e[0]) :o.content)}Popover.prototype.arrow = function () {return (this.$arrow = this.$arrow || this.tip().find('.arrow'))}// POPOVER PLUGIN DEFINITION// =========================function Plugin(option) {return this.each(function () {var $this   = $(this)var data    = $this.data('bs.popover')var options = typeof option == 'object' && optionif (!data && /destroy|hide/.test(option)) returnif (!data) $this.data('bs.popover', (data = new Popover(this, options)))if (typeof option == 'string') data[option]()})}var old = $.fn.popover$.fn.popover             = Plugin$.fn.popover.Constructor = Popover// POPOVER NO CONFLICT// ===================$.fn.popover.noConflict = function () {$.fn.popover = oldreturn this}}(jQuery);

三、应用 & 源码分析

1、应用

 <button type="button" class="btnbtn-default" data-container="body" data-placement="bottom" data-toggle="popover"data-original-title="Bootstrap弹出框标题" data-content="Bootstrap弹出框的内容">猛击我吧</button><a href="#" class="btnbtn-default" data-container="body" data-placement="right" data-toggle="popover"title="Bootstrap弹出框标题" data-content="Bootstrap弹出框的内容">猛击我吧</a>// 不能直接通过自定义属性data-来触发,需依赖于JavaScript<script type="text/javascript">$(function () {$('[data-toggle="popover"]').popover();});</script>

2、源码分析

2.1、popovers.less

1、弹出框 popover 模板与 tooltip 不同,不仅有标题,还可以设置内容

2.2、popover.js

1、popover 继承了 tooltip 的原型,只不过覆盖了部分布局方法
2、提示框 tooltip 的默认触发事件是 hover 和 focus,而弹出框 popover 是 click

bootstrap之popover相关推荐

  1. BootStrap笔记-popover的使用(popover中放验证码,点击更新)

    做出来的效果是这样的. 当鼠标点击验证码的Input框时. 点击里面的img可以进行刷新 对应的代码如下: <link href="css/bootstrap.min.css" ...

  2. bootstrap之popover插件使用

    bootstrap可以说是后台管理前端的一个很不错的框架,应用也特别广泛,但笔者认为bootstrap的一些开发文档却不是很足,有时查个东西得找半天. 一般情况下,开源软件的官网是资料最全主要是准确的 ...

  3. bootstrap的popover呈现table

    效果如下图: 原生的popover只支持 静态内容,此示例中的table是动态渲染的,需要对部分源码稍作调试. POPOVER插件调整如下: +function ($) {"use stri ...

  4. php使用popover,php中bootstrap框架.popover弹出框,鼠标移动到上面自动显示,离开自动消失...

    $(function(){//显示弹出框 $("[rel=name]").popover({ trigger:'manual', placement : 'bottom', //p ...

  5. 学习使用Bootstrap弹出框Popover提示框样式

    学习使用Bootstrap弹出框Popover提示框样式 注意事项 弹出方向 失去焦点隐藏 禁用元素弹出提示框 data属性详解 js方法与事件 方法: 事件: 注意事项 popover提示框组件依赖 ...

  6. bootstrap的tooltip

    bootstrap官方自带有tooltip插件,用起来挺好看的,也不用去找其他的了,看看其效果来: 就是这样的效果:当鼠标悬停在小图标上时,出现对该项的解释,我还是用JavaScript的方式实现.整 ...

  7. jquery 定义html模板,jquery – 使自定义html模板使自举popover工作

    我正在使用输入组文本框,我需要Bootstrap 3 popover才能正常工作,而Popover模板应该由我设计和设计. 所以我目前与我的html是: 当输入组图标点击时,我想要一个popover打 ...

  8. 如何点击按钮弹出弹框显示几秒_layer消息框显示在鼠标旁边

    layer因为操作简单,界面美观,是开发消息弹窗的不二选择.一般我们都会让消息框采用浮动效果显示在屏幕正中间,但是如果我们的需求是弹框显示在鼠标点击位置的左下角,而且是随滚动条移动的,就像bootst ...

  9. 【Yeoman】热部署web前端开发环境

    本文来自 "简时空":<[Yeoman]热部署web前端开发环境>(自动同步导入到博客园) 1.序言 记得去年的暑假看RequireJS的时候,曾少不更事般地惊为前端利 ...

最新文章

  1. 【翻译】将Ext JS Grid转换为Excel表格
  2. WordPress标签
  3. 指定wsus服务器,步骤 2:在服务器上安装 WSUS
  4. 打印对象和toString方法
  5. java内存模型浅析_浅析java内存模型
  6. 服务器打开虚拟机电源重启,虚拟机服务器自动重启
  7. c#操作html dom元素,C#获取与修改HTML DOM元素信息
  8. java中注解的使用与实例(一)
  9. android edittext 正则限制,Android EditText 使用正则表达式进行输入过滤
  10. 石锤!今年Python要过苦日子了? 程序员:我疯了!
  11. Java高级语法笔记-反射机制(Reflection) (1)
  12. ETL数据清洗的案例
  13. 俄罗斯方块代码 java_俄罗斯方块java代码-java编写俄罗斯方块代码详解分享
  14. 童年修复系列-SNES芯片组介绍及FPGA实现
  15. 再说setlocale——关于区域名称
  16. windows图片和传真查看器的调出
  17. 一个简单的敌人自动寻找玩家进行攻击及受到伤害死亡效果实现
  18. 接口调用正常却返回404
  19. GRA灰色关联度分析学习 附python代码
  20. mysql更新多字段sql_sql的update语句 批量更新某字段

热门文章

  1. C语言中信号量的使用
  2. 维基百科,全世界的百科全书—Jimmy Wales
  3. 元宇宙到底是不是资本骗局?
  4. MySql中Explain的Extra列
  5. 阿空实训日记——永别牢笼计划第二天
  6. css属性之appearance
  7. Unix网络编程 学习记录01
  8. 2019最新抢票攻略
  9. oracle如何将f8设置成执行,恢复F8(恢复到出厂设置)功能
  10. java单例模式之懒汉模式和饿汉模式