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


Posted in Javascript onJune 13, 2016

一、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个精彩的专题:

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

Javascript 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
JS替换文本域内的回车示例
Feb 18 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
在angularJs中进行数据遍历的2种方法
Oct 08 Javascript
在vue中使用G2图表的示例代码
Mar 19 Javascript
通过实例解析js可枚举属性与不可枚举属性
Dec 02 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 #Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
Jun 12 #Javascript
JavaScript解八皇后问题的方法总结
Jun 12 #Javascript
jQuery遍历json的方法(推荐)
Jun 12 #Javascript
jQuery移动端图片上传组件
Jun 12 #Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
Jun 12 #Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
Jun 12 #Javascript
You might like
模仿OSO的论坛(四)
2006/10/09 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
DOM 基本方法
2009/07/18 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
js实现消灭星星(web简易版)
2020/03/24 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
详解python中的 is 操作符
2017/12/26 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python实现canny边缘检测
2020/09/14 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
高中生学习的自我评价
2013/12/14 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
教学质量月活动总结
2015/05/11 职场文书
刮痧观后感
2015/06/05 职场文书
七年级数学教学反思
2016/02/17 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
Go使用协程交替打印字符
2021/04/29 Golang