全面解析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 相关文章推荐
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 Javascript
Javascript学习笔记2 函数
Jan 11 Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
js实现身份证号码验证的简单实例
Feb 19 Javascript
node.js中的console.time方法使用说明
Dec 09 Javascript
jQuery 重复加载错误以及修复方法
Dec 16 Javascript
jQuery实现防止提交按钮被双击的方法
Mar 24 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 Javascript
js实现页面图片消除效果
Mar 24 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
Look And Say 序列php实现代码
2011/05/22 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
利用Hyperic调用Python实现进程守护
2018/01/02 Python
python基础教程项目二之画幅好画
2018/04/02 Python
python贪吃蛇游戏代码
2020/04/18 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
机械制造与自动化应届生求职信
2013/11/16 职场文书
经典促销广告词大全
2014/03/19 职场文书
房屋转让协议书范本
2014/04/11 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
会计人员演讲稿
2014/09/11 职场文书
街道务虚会发言材料
2014/10/20 职场文书
项目验收申请报告
2015/05/15 职场文书
政审证明材料
2015/06/19 职场文书