data() { return { homeCate: [ { name: 'Jewelry & Watches', category_id: 110, url: '', product: [], is_cate: false, } ], homeCateLoading: true, } }, mounted() { window.addEventListener('scroll', this.onScrollFunc, true) }, methods: { onScrollFunc(event) { if (this.homeCateLoading) { this.homeCateLoading = false; const scrollTop = event.target.documentElement.scrollTop; const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; const that = this; this.homeCate.forEach(function (item, index) { if (!(item.product.length > 0) && !item.is_cate) { var offsetTop = document.getElementById('categoryProduct' + index).offsetTop; var top = offsetTop - scrollTop; if (top <= viewPortHeight + 100) { let params = { limit: 4, page: 1, category_id: item.category_id, } that.$set(that.homeCate[index], 'is_cate', true); setTimeout(function () { getGoodList(params).then(response => { that.$set(that.homeCate[index], 'product', response.data); }); }, 1000); } } if (that.homeCate.length == (index + 1)) { that.$nextTick(() => { that.homeCateLoading = true; }) } }); } }, }