全面解析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管中窥豹 形参与实参浅析
Dec 17 Javascript
Javascript图像处理—平滑处理实现原理
Dec 28 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
JQuery 获取Dom元素的实例讲解
Jul 08 jQuery
Vue组件选项props实例详解
Aug 18 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
Nov 20 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使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
python的concat等多种用法详解
2018/11/28 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
白色公司:The White Company
2017/10/11 全球购物
生产部厂长助理职位说明书
2014/03/03 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
技能比武方案
2014/05/21 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
考博导师推荐信范文
2015/03/27 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android