全面解析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 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
JQquery的一些使用心得分享
Aug 01 Javascript
jQuery中DOM树操作之复制元素的方法
Jan 23 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
BootStrap入门教程(三)之响应式原理
Sep 19 Javascript
js放大镜放大购物图片效果
Jan 18 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
json2.js 入门教程之使用方法与实例分析
Sep 14 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
Vue组件中的data必须是一个function的原因浅析
Sep 03 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 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 mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Python 3.8 新功能全解
2019/07/25 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
Structs界面控制层技术
2013/10/11 面试题
捐款倡议书范文
2014/02/02 职场文书
小学运动会班级口号
2014/06/09 职场文书
群众路线领导对照材料
2014/08/23 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python