• BOOtstrap源码分析之 tooltip、popover


    一、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, {  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 ? {  $(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)宽度

       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等交互控件)

  • 相关阅读:
    微信支付Native扫码支付模式二之CodeIgniter集成篇
    如何使用硬盘安装debian8.3?
    使用git将代码push到osc上
    树莓派(Raspberry Pi)搭建简单的lamp服务
    win下修改mysql默认的字符集以防止乱码出现
    CodeIgniter2.2.0-在控制器里调用load失败报错的问题
    Ubuntu Server(Ubuntu 14.04 LTS 64位)安装libgdiplus2.10.9出错问题记录
    linux下mono的安装与卸载
    asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题
    使用NPOI将数据导出为word格式里的table
  • 原文地址:https://www.cnblogs.com/cqhaibin/p/5578847.html
Copyright © 2020-2023  润新知