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

作者:小龙女先生 时间:2024-05-21 10:14:19 

一、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)宽度

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

 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插件使用教程

标签:Bootstrap,tooltip,popover
0
投稿

猜你喜欢

  • python网络编程之多线程同时接受和发送

    2021-12-01 07:20:09
  • 如何用表单在线建立目录?

    2010-06-16 09:49:00
  • python全栈开发语法总结

    2021-08-25 06:16:33
  • Pandas 筛选和删除目标值所在的行的实现

    2021-11-16 03:11:31
  • 网页设计的12种颜色

    2011-05-21 08:40:00
  • numpy matrix和array的乘和加实例

    2022-09-29 15:17:45
  • 如何优化下面这段代码?

    2010-01-23 11:30:00
  • 谈ASP的未来

    2009-03-24 20:35:00
  • Win7 32/64位系统下安装SQL2005和SP3补丁安装教程[图文]

    2024-01-28 11:22:59
  • 细化解析:SQL Server 2000 的各种版本

    2009-02-05 15:41:00
  • 基于OpenCV的路面质量检测的实现

    2023-12-29 14:52:52
  • vue+moment实现倒计时效果

    2024-05-09 10:43:55
  • Golang监听日志文件并发送到kafka中

    2024-04-25 13:20:44
  • Python MySQL进行数据库表变更和查询

    2024-01-17 04:35:24
  • vue下拉菜单组件(含搜索)的实现代码

    2024-05-09 15:18:57
  • Go微服务网关的实现

    2023-07-02 22:27:05
  • Python字典中的值为列表或字典的构造实例

    2023-10-24 08:52:01
  • python查看列的唯一值方法

    2021-09-20 07:25:46
  • Python通过websocket与js客户端通信示例分析

    2021-03-23 08:35:49
  • php实现的微信分享到朋友圈并记录分享次数功能

    2023-10-17 04:32:14
  • asp之家 网络编程 m.aspxhome.com