全面解析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 相关文章推荐
文本加密解密
Jun 23 Javascript
JavaScript 应用类库代码
Jun 02 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
Jun 23 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
解决ionic和angular上拉加载的问题
Aug 03 Javascript
React + webpack 环境配置的方法步骤
Sep 07 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
May 09 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
Jul 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
解析link_mysql的php版
2013/06/30 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
应届生高等护理求职信
2013/10/12 职场文书
《散步》教学反思
2014/03/02 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
工商干部先进事迹
2014/05/14 职场文书
工程负责人任命书
2014/06/06 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python