全面解析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 相关文章推荐
showModalDialog 和 showModelessDialog
Jan 22 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
JQuery调用WebServices的方法和4个实例
May 06 Javascript
js调试系列 初识控制台
Jun 18 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
Apr 20 Javascript
jquery仿京东商品放大浏览页面
Jun 06 jQuery
微信小程序之网络请求简单封装实例详解
Jun 28 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
ElementUI多个子组件表单的校验管理实现
Nov 07 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
Apr 25 Javascript
JavaScript WeakMap使用详解
Feb 05 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
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
js表数据排序 sort table data
2009/02/18 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
详解VUE 数组更新
2017/12/16 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
vue路由教程之静态路由
2019/09/03 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python 常用string函数详解
2016/05/30 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
python实现udp聊天窗口
2020/03/31 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
银行实习生的自我评价
2013/12/09 职场文书
给学校的建议书
2014/03/12 职场文书
离婚案件原告代理词
2015/05/23 职场文书
新教师教学工作总结
2015/08/12 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
2019入党申请书格式
2019/06/25 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis
CSS的calc函数用法小结
2022/06/25 HTML / CSS