全面解析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 相关文章推荐
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
jquery实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
Jquery实现纵向横向菜单
Jan 24 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
微信小程序 http请求的session管理
Jun 07 Javascript
详解webpack 多入口配置
Jun 16 Javascript
基于bootstrap写的一点localStorage本地储存
Nov 21 Javascript
Vue父组件调用子组件事件方法
Feb 23 Javascript
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
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
mysql 全文搜索 技巧
2007/04/27 PHP
PHP的基本常识小结
2013/07/05 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
基于PHP制作验证码
2016/10/12 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
jquery 实现的全选和反选
2009/04/15 Javascript
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
电脑租赁公司创业计划书
2014/01/08 职场文书
大四学生思想汇报
2014/01/13 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
期中考试后的感想
2015/08/07 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
2019消防宣传标语!
2019/07/10 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS
python 使用pandas读取csv文件的方法
2022/12/24 Python