vueスクロールバーのロードデータのリスニング
2725 ワード
vueプロジェクトでスクロールバーを傍受するのと、通常のHTMLでスクロールバーを傍受するのとは同じです.まず3つの値を知る必要があります:スクロールバーの距離divの頂部の値、divの自分の高さとdivの内容を広げる高さ、それぞれ私の下の変数に対応してscrollTop、height、htmlHeightです;2.次に通常のHTMLと異なる点は、スクロールホイールがコンテンツの増加に伴ってページの下部に維持され、イベントが実行され続けることである.この問題は、vue DOMレンダリングが特別であり、データが変化した後にDOMがすぐに変化するのではなく、仮想DOMを生成し、一定のポリシーに基づいてページをレンダリングするためである.この場合、遅延settimeout関数にwatchを加えてtableDataのデータを監視するかもしれませんが、スクロールバーはロールバックするたびにジャンプし、2回ロールバックします.この場合は$nextTickが必要であり、$nextTickは次回のDOM更新サイクルが終了した後に遅延コールバックを実行し、データを修正した後に使用する.コードは次のとおりです.
あなたに役に立つことを望みます!
mounted(){
// scroll
let self = this;
$(".div-table").scroll(function(){
self.loadMore();
})
},
methods:{
loadMore() {
let scrollTop = document.getElementsByClassName("div-table")[0].scrollTop;
let height = $(".div-table").height();
let htmlHeight = $(".table-loading").height()
//console.log(scrollTop + ',' + height + "," + scrollHeight)
if(scrollTop + height >= htmlHeight){
let start = this.tableData.length;
if(start >= 43){ // 43 , 43 “ ”。
this.hasData = false;
return;
}
//
var arr = []
for(let i = start + 1; i < start + 10; i++) {
arr.push({
name: ' ',
gender:' ',
age:"17",
doctor:" ",
department:" ",
date: '2016-05-02',
money:"2000.45",
operation:" "
})
}
setTimeout(()=>{
this.tableData = this.tableData.concat(arr);
//let height = $(".div-table").scrollTop();
//var div = document.getElementsByClassName('div-table')[0];
//div.scrollTop = height
},1000)
}
}
},
watch:{
tableData:function(){
let height = $(".div-table").scrollTop();
this.$nextTick(() => {
var div = document.getElementsByClassName('div-table')[0];
div.scrollTop = height
})
}
}
あなたに役に立つことを望みます!