全面解析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的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 Javascript
『jQuery』名称冲突使用noConflict方法解决
Apr 22 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
Apr 05 Javascript
微信小程序 同步请求授权的详解
Aug 04 Javascript
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
浅析JavaScript中的特殊数据类型
Dec 15 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 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格式化日期和时间格式化示例分享
2014/02/24 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
对python模块中多个类的用法详解
2019/01/10 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
Django 路由控制的实现
2019/07/17 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
python中如何使用insert函数
2020/01/09 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
暑期社会实践学生的自我评价
2014/01/09 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
个人安全生产责任书
2014/07/28 职场文书
2014年妇联工作总结
2014/11/21 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android