解決vue項(xiàng)目獲取dom元素寬高總是不準(zhǔn)確問(wèn)題
dom元素內(nèi)部?jī)?nèi)容是動(dòng)態(tài)的,重置數(shù)據(jù)后直接獲取寬高總是不準(zhǔn)確:
this.$refs.editor[0].offsetHeight;
原因:重置數(shù)據(jù)后獲取dom元素寬高時(shí),dom元素還未渲染完畢;
解決方法:利用Vue.nectTick(callback)
this.$nextTick(() => { this.$refs.editor[0].offsetHeight;})
Vue.nectTick() 是在下次DOM更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào)
補(bǔ)充知識(shí):vue 獲取 指定元素的高度寬度等(使用vue中的 ref 獲取到的是 dom 元素高度或者寬度)
使用 vue 的時(shí)候,想要獲得一個(gè)指定的元素的高度時(shí),可以使用 vue 中的 ref 。
當(dāng) ref 加在普通的元素上,使用 this.ref.name 獲取到的是 dom 元素
示例
寫在 頁(yè)面 html 部分的
<div ref='init'></div>
寫在 頁(yè)面 方法 部分
這里的 offsetHeight 是返回元素的寬度(包括元素寬度、內(nèi)邊距和邊框,不包括外邊距)
let height= this.$refs.init.$el.offsetHeight;
這里的offsetHeight可以替換,用來(lái)獲取其他的屬性
offsetWidth //返回元素的寬度(包括元素寬度、內(nèi)邊距和邊框,不包括外邊距)
offsetHeight //返回元素的高度(包括元素高度、內(nèi)邊距和邊框,不包括外邊距)
clientWidth //返回元素的寬度(包括元素寬度、內(nèi)邊距,不包括邊框和外邊距)
clientHeight //返回元素的高度(包括元素高度、內(nèi)邊距,不包括邊框和外邊距)
style.width //返回元素的寬度(包括元素寬度,不包括內(nèi)邊距、邊框和外邊距)
style.height //返回元素的高度(包括元素高度,不包括內(nèi)邊距、邊框和外邊距)
scrollWidth //返回元素的寬度(包括元素寬度、內(nèi)邊距和溢出尺寸,不包括邊框和外邊距),無(wú)溢出的情況,與clientWidth相同
scrollHeigh //返回元素的高度(包括元素高度、內(nèi)邊距和溢出尺寸,不包括邊框和外邊距),無(wú)溢出的情況,與clientHeight相同
除此之外,還可以獲取帶有單位的數(shù)值
let height = window.getComputedStyle(this.$refs.init).height;
這樣獲取的值是有單位的。
以上這篇解決vue項(xiàng)目獲取dom元素寬高總是不準(zhǔn)確問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. CSS hack用法案例詳解2. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說(shuō)明3. 解決AJAX返回狀態(tài)200沒(méi)有調(diào)用success的問(wèn)題4. PHP設(shè)計(jì)模式中工廠模式深入詳解5. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向6. 利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法7. Ajax實(shí)現(xiàn)表格中信息不刷新頁(yè)面進(jìn)行更新數(shù)據(jù)8. JSP數(shù)據(jù)交互實(shí)現(xiàn)過(guò)程解析9. ThinkPHP5實(shí)現(xiàn)JWT Token認(rèn)證的過(guò)程(親測(cè)可用)10. .NET中l(wèi)ambda表達(dá)式合并問(wèn)題及解決方法
