VUE 실시 간 감청 요소 의 상단 높이 조작
.html
<!-- ref -->
<div ref="pronbit">
<div> </div>
<div> </div>
</div>
.js
mounted(){
window.addEventListener('scroll',this.handleScrollx,true)
},
methods: {
handleScrollx() {
console.log(' ',window.pageYOffset)
console.log(' ',this.$refs.pronbit.getBoundingClientRect().top)
},
}
추가 지식:Vue 비동기 업데이트 대기 열 및$nextTick 사용질문 1:$nextTick 이 무엇 입 니까?
간단 한 대답:
Vue 의 비동기 업데이트 대기 열 때문에$nextTick 은 DOM 업데이트 가 언제 끝 났 는 지 알 아 보 는 데 사 용 됩 니 다.
상세 한 해석:
우 리 는 먼저 이러한 장면 을 보 겠 습 니 다.div 가 있 습 니 다.기본적으로 v-if 로 숨 기 고 단 추 를 누 른 후에 v-if 의 값 을 바 꾸 어 표시 하고 이 div 의 텍스트 내용 을 가 져 옵 니 다.v-if 의 값 이 false 라면 div 내용 을 직접 가 져 올 수 없습니다.이때 div 가 생 성 되 지 않 았 기 때문에 단 추 를 누 른 후에 v-if 의 값 을 true 로 바 꿔 야 div 가 생 성 됩 니 다.이때 다시 가 져 옵 니 다.예제 코드 는 다음 과 같 습 니 다.
<div id="app">
<div id="div" v-if="showDiv"> </div>
<button @click="getText"> div </button>
</div>
<script>
var app = new Vue({
el : "#app",
data:{
showDiv : false
},
methods:{
getText:function(){
this.showDiv = true;
var text = document.getElementById('div').innnerHTML;
console.log(text);
}
}
})
</script>
이 코드 는 이해 하기 어렵 지 않 지만 실행 후 콘 솔 에서 오류 가 발생 합 니 다.Cannot read property'innerHTML of null 은 div 요 소 를 얻 지 못 한 다 는 뜻 입 니 다.여기 서 Vue 와 관련 된 중요 한 개념:비동기 업데이트 대기 열.비동기 업데이트 대기 열
Vue 는 데이터 변 화 를 관찰 할 때 DOM 을 직접 업데이트 하 는 것 이 아니 라 하나의 대기 열 을 열 고 같은 이벤트 순환 에서 발생 하 는 모든 데이터 변 화 를 버퍼 링 합 니 다.버퍼 링 시 중복 데 이 터 를 제거 하여 불필요 한 계산 과 DOM 작업 을 피 합 니 다.그리고 다음 이벤트 순환 tick 에서 Vue 가 대기 열 을 새로 고치 고 실제 작업 을 수행 합 니 다.그래서 만약 에 하나의 for 순환 으로 데 이 터 를 100 번 동적 으로 바 꾸 면 사실은 마지막 변화 만 적용 할 것 이다.만약 에 이런 체제 가 없 으 면 DOM 은 100 번 을 다시 그 려 야 한다.이것 은 물론 큰 비용 이다.
Vue 는 현재 브 라 우 저 환경 에 따라 네 이 티 브 Promise.then 과 MutationObserver 를 우선 사용 하 며,모두 지원 되 지 않 으 면 setTimeout 으로 대체 합 니 다.
Vue 비동기 업데이트 DOM 의 원 리 를 알 게 되면 위의 예제 의 오류 도 이해 하기 어렵 지 않다.사실 this.showDiv=true 를 실행 할 때 div 는 생 성 되 지 않 았 습 니 다.다음 vue 이벤트 가 순환 할 때 까지 만 들 기 시 작 했 습 니 다.$nextTick 은 DOM 업데이트 가 언제 완 료 될 지 알 기 위해 서 입 니 다.따라서 위의 예제 코드 는 다음 과 같이 수정 해 야 합 니 다.
<div id="app">
<div id="div" v-if="showDiv"> </div>
<button @click="getText"> div </button>
</div>
<script>
var app = new Vue({
el : "#app",
data:{
showDiv : false
},
methods:{
getText:function(){
this.showDiv = true;
this.$nextTick(function(){
var text = document.getElementById('div').innnerHTML;
console.log(text);
});
}
}
})
</script>
이때 이 벤트 를 클릭 하면 콘 솔 에서 div 의 내용 을 출력 합 니 다.이것 은 텍스트 입 니 다.이론 적 으로 우 리 는 DOM 을 주동 적 으로 조작 하지 않 아 도 된다.Vue 의 핵심 사상 은 바로 데이터 구동 DOM 이기 때문이다.그러나 많은 업무 에서 우 리 는 일부 제3자 라 이브 러 리,예 를 들 어 popper.js,swiper 등 을 사용 하 는 것 을 피 할 수 없다.이런 원생 자바 script 을 바탕 으로 하 는 라 이브 러 리 는 모두 생 성 되 고 더욱 새 롭 고 소각 되 는 완전한 생명 주 기 를 가지 고 Vue 와 함께 사용 할 때$nextTick 을 잘 이용 해 야 한다.
이상 의 VUE 실시 간 감청 요소 가 상단 높이 에서 작 동 하 는 것 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VUE 기반 장치가 PC인지 모바일 포트인지 판단실제 개발 과정에서 자주 발생하는 수요는 현재 웹 페이지에 로그인한 장치가 PC인지 이동인지를 판단하고 PC 측과 모바일 측이 서로 다른 웹 내용을 표시하도록 요구하는 것이다. 그러면 현재 로그인 장치에 대한 판단이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.