全面解析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实战_读书笔记2 选择器
Jan 22 Javascript
JS俄罗斯方块,包含完整的设计理念
Dec 11 Javascript
jQuery1.6 使用方法二
Nov 23 Javascript
基于jquery的多功能软键盘插件
Jul 25 Javascript
用js来获取上传的文件名纯粹是为了美化而用
Oct 23 Javascript
谷歌地图打不开的解决办法
Aug 07 Javascript
jquery实现的用户注册表单提示操作效果代码分享
Aug 28 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
Jun 26 Javascript
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
微信小程序修改数组长度的问题的解决
Dec 17 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自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
javascript各种复制代码收集
2008/09/20 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
浅述python2与python3的简单区别
2018/09/19 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
2020/08/07 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
公司承诺书格式
2014/05/21 职场文书
开展读书活动总结
2014/06/30 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis