全面解析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 相关文章推荐
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
JavaScript中的noscript元素属性位置及作用介绍
Apr 11 Javascript
带左右箭头图片轮播的JS代码
Dec 18 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
Jan 02 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
js调用屏幕宽度的简单方法
Nov 14 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
Webpack框架核心概念(知识点整理)
Dec 22 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
JavaScript undefined及null区别实例解析
Jul 21 Javascript
JavaScript实现拖动对话框效果的实现代码
Oct 12 Javascript
vue基于Teleport实现Modal组件
May 31 Vue.js
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
谈谈PHP语法(2)
2006/10/09 PHP
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
由php if 想到的些问题
2008/03/22 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
js数据类型检测总结
2018/08/05 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
使用python实现多维数据降维操作
2020/02/24 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
PyTorch安装与基本使用详解
2020/08/31 Python
如何在C# winform中异步调用web services
2015/09/21 面试题
淘宝中秋节活动方案
2014/01/31 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
2014年变电站工作总结
2014/12/19 职场文书
朋友聚会开场白
2015/06/01 职场文书
学习党史心得体会2016
2016/01/23 职场文书
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
Go语言编译原理之源码调试
2022/08/05 Golang