全面解析Bootstrap中tooltip、popover的使用方法

 更新时间:2016年06月13日 08:35:51   作者:小龙女先生  
这篇文章主要为大家详细解析了Bootstrap中tooltip、popover的使用方法,了解提示框、弹出框的实现原理,感兴趣的朋友可以参考一下

一、tooltip(提示框)
 源码文件:
 Tooltip.js
Tooltip.scss

实现原理: 
1、获取当前要显示tooltip的元素的定位信息(top、left、bottom、right、width、height等)
2、计算tooltip的位置,是top、left、bottom、right其中一个
3、然后根据计算的位置值,运算出坐标值
4、给tooltip应用坐标值 

源码分析: 
1、ownerDocument:文档;包含两个对象:<DocType>、documentElement(根节点)
2、$.contains(domA, domB):判断domA是否包含domB元素
3、应用了offset.setOffset方法,传入了using参数,因为offset设置值的时候,不能四舍五入
4、$viewport:显示tooltipr的容器元素
5、getPosition:此函数获取元素定位坐标相关的信息,如:top、left、bottom、right、width、height、scroll等
  5.1、共用到了getBoundingClientRect方法,但此方法在IE8-会插件width、height
  5.2、如果是body,width、height会被重置为window的
  5.3、源码如下: 

$element = $element || this.$element //如果没有传入参数,则以$element(触发tooltip事件的元素)为准

 var el = $element[0]
 var isBody = el.tagName == 'BODY'

 var elRect = el.getBoundingClientRect()
 if (elRect.width == null) {
 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
 }
 var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null

return $.extend({}, elRect, scroll, outerDims, elOffset)

6、getCalculatedOffset:计算tooltip的坐标值,利用的是width、height折半原理实现
  6.1、bottom时
    6.1.1、top为定位元素(pos)的top+ 定位元素(pos)的高度
    6.1.2、left为定位元素(pos)的Left – 定位元素(pos)的宽度/2 – tooltip元素宽度/2
  6.2、top时
    6.2.1、top为定位元素(pos) 的top-tooltip元素的高度
    6.2.2、left为定位元素(pos)的left – 定位元素(pos)的宽度/2 – tooltip元素宽度/2
  6.3、left时
    6.3.1、top为定位元素(pos)的top – 定位元素(pos)的高度/2 – tooltip元素高度/2
    6.3.2、left为定位元素(pos)的left – tooltip元素的宽度
  6.4、right时
    6.4.1、top为定位元素(pos)的top – 定位元素(pos)高度/2 – tooltip元素高度/2
    6.4.2、left为定位元素(pos)的left + 定位元素(pos)宽度

 

 6.5、小三角的位置,一般情况下元素的50%的位置,但如果出现tooltip被left、top、right、bottom隐藏的时候,就需要重新计算和调整位置了。方法名为:getViewportAdjustedDelta
     6.5.1、首先计算出被overflow的宽度、或者高度
     6.5.2、然后计算出arrowDelta的值,隐藏值 * 2 –tooltip宽度 + tooltip宽度
     6.5.3、设置三角的top或left百分比的值 

二、Popover(弹出框)
 源码文件: 
Popover.js
Popover.scss

实现原理: 
1、继承tooltip实现的
2、多了一个标题,还可以自定义content(里面可以插入input、button等交互控件)

如果大家还想深入学习,可以点击这里进行学习,再为大家附3个精彩的专题:

Bootstrap学习教程

Bootstrap实战教程

Bootstrap插件使用教程

以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。

相关文章

  • javascript 像素拼图实现代码

    javascript 像素拼图实现代码

    非常不错的像素拼图效果
    2009-04-04
  • 微信小程序授权登录实现方案wx.getUserProfile(2022年最新版)

    微信小程序授权登录实现方案wx.getUserProfile(2022年最新版)

    微信在最近开始要求使用wx.getUserProfile()来获取用户的昵称,头像等信息,所以下面这篇文章主要给大家介绍了关于2022年最新版微信小程序授权登录实现方案wx.getUserProfile的相关资料,需要的朋友可以参考下
    2022-11-11
  • JS实现的简单图片切换功能示例【测试可用】

    JS实现的简单图片切换功能示例【测试可用】

    这篇文章主要介绍了JS实现的简单图片切换功能,结合实例形式分析了javascript结合时间函数定时触发控制图片的遍历与切换操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • addEventListener 的用法示例介绍

    addEventListener 的用法示例介绍

    这篇文章主要介绍了addEventListener 的用法,需要的朋友可以参考下
    2014-05-05
  • 基于openlayers4实现点的扩散效果

    基于openlayers4实现点的扩散效果

    这篇文章主要为大家详细介绍了基于openlayers4实现点的扩散效果 ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 深入理解js 中async 函数的含义和用法

    深入理解js 中async 函数的含义和用法

    async 函数就是隧道尽头的亮光,很多人认为它是异步操作的终极解决方案。接下来通过本文给大家分享js 中async 函数的含义和用法,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-05-05
  • Javascript !!的作用

    Javascript !!的作用

    取变量的Boolean值
    2008-12-12
  • 微信小程序抽奖组件的使用步骤

    微信小程序抽奖组件的使用步骤

    这篇文章主要给大家介绍了关于微信小程序抽奖组件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • JS中如何优雅的使用async await详解

    JS中如何优雅的使用async await详解

    async表示异步,而await可以看作async wait,个人对async与await的简单理解就是,我们可以用同步的方式去书写异步代码,这篇文章主要给大家介绍了关于JS中如何优雅的使用async await的相关资料,需要的朋友可以参考下
    2021-10-10
  • js 回车提交表单两种实现方法

    js 回车提交表单两种实现方法

    js 回车提交一些新手朋友还是比较陌生的,本文介绍两种实现方法:jQuery方法、JavaScript方法,感兴趣的朋友可以研究下
    2012-12-12

最新评论