全面解析Bootstrap中tooltip、popover的使用方法
一、tooltip(提示框)
源碼文件:
Tooltip.js
Tooltip.scss
實現(xiàn)原理:
1、獲取當(dāng)前要顯示tooltip的元素的定位信息(top、left、bottom、right、width、height等)
2、計算tooltip的位置,是top、left、bottom、right其中一個
3、然后根據(jù)計算的位置值,運算出坐標值
4、給tooltip應(yīng)用坐標值
源碼分析:
1、ownerDocument:文檔;包含兩個對象:<DocType>、documentElement(根節(jié)點)
2、$.contains(domA, domB):判斷domA是否包含domB元素
3、應(yīng)用了offset.setOffset方法,傳入了using參數(shù),因為offset設(shè)置值的時候,不能四舍五入
4、$viewport:顯示tooltipr的容器元素
5、getPosition:此函數(shù)獲取元素定位坐標相關(guān)的信息,如: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 //如果沒有傳入?yún)?shù),則以$element(觸發(fā)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折半原理實現(xiàn)
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%的位置,但如果出現(xiàn)tooltip被left、top、right、bottom隱藏的時候,就需要重新計算和調(diào)整位置了。方法名為:getViewportAdjustedDelta
6.5.1、首先計算出被overflow的寬度、或者高度
6.5.2、然后計算出arrowDelta的值,隱藏值 * 2 –tooltip寬度 + tooltip寬度
6.5.3、設(shè)置三角的top或left百分比的值
二、Popover(彈出框)
源碼文件:
Popover.js
Popover.scss
實現(xiàn)原理:
1、繼承tooltip實現(xiàn)的
2、多了一個標題,還可以自定義content(里面可以插入input、button等交互控件)
如果大家還想深入學(xué)習(xí),可以點擊這里進行學(xué)習(xí),再為大家附3個精彩的專題:
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)javascript程序設(shè)計有所幫助。
相關(guān)文章
js解決event.keyCode在Firefox中失效的問題
這篇文章主要介紹了js解決event.keyCode在Firefox中失效的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12jquery的$(document).ready()和onload的加載順序
最近在改一個嵌入在frame中的頁面的時候,使用了jquery做效果,而頁面本身也綁定了onload事件。改完后,F(xiàn)irefox下測試正常流暢,IE下就要等個十幾秒jquery的效果才出現(xiàn),黃花菜都涼了。2010-05-05JavaScript改變HTML元素的樣式改變CSS及元素屬性
改變CSS及元素屬性的方法有很多,在本文將為大家介紹下使用js是如何做到的,感興趣的朋友可以感受下2013-11-11javascript setTimeout()傳遞函數(shù)參數(shù)(包括傳遞對象參數(shù))
由于需要,我要用到setTimeout()并且在里邊的函數(shù)參數(shù)傳遞一個參數(shù),就像這樣setTimeout("fun(參數(shù))", 1000)。但是以我這種寫法,js會報錯,說‘參數(shù)’未定義。2010-04-04