이 글은 주로 간단한 vue 무한 로딩 지침을 구현하는 방법을 소개합니다. 이제 특정 참조 가치가 있으므로 필요한 친구는
vue를 참조할 수 있습니다. 다음은 데이터를 로드하고 무한 로드를 달성하기 위해 맨 아래로 스크롤하여 간단한 명령을 사용자 정의하는 방법에 대한 소개입니다.
무한 로딩의 원리는 스크롤할 때마다 스크롤 거리를 구해야 합니다. 스크롤 거리에 브라우저 창 높이를 더한 값이 콘텐츠 높이보다 크거나 같으면 됩니다. , 트리거 기능을 사용하여 데이터를 로드합니다.
먼저 vue를 사용하지 않고 무한 로딩을 구현하는 방법을 소개하겠습니다.
프레임 사용 안 함
먼저 html:
<!DOCTYPE html><html lang="en">
<head><meta charset="UTF-8">
<title>实现滚动加载</title>
<style>
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
li, ul {
list-style: none;
}
.container {
width: 980px;
margin: 0 auto;
}
.news__item {
height: 80px;
margin-bottom: 20px;
border: 1px solid #eee;
}</style>
</head>
<body>
<p class="container">
<ul class="news" id="news">
<li class="news__item">1、hello world</li>
<li class="news__item">2、hello world</li>
<li class="news__item">3、hello world</li>
<li class="news__item">4、hello world</li>
<li class="news__item">5、hello world</li>
<li class="news__item">6、hello world</li>
<li class="news__item">7、hello world</li>
<li class="news__item">8、hello world</li>
<li class="news__item">9、hello world</li>
<li class="news__item">10、hello world</li>
</ul>
</p>
</body>
</html>#🎜 🎜 #
#🎜🎜 #
은 위의 원칙에 해당합니다:window.addEventListener('scroll', function() {
var scrollTop = document.body.scrollTop;
if(scrollTop + window.innerHeight >= document.body.clientHeight) {
// 触发加载数据
loadMore();
}
});
function loadMore() {
console.log('加载数据')'
}// 表示列表的序号
var index = 10;
function loadMore() {
var content = '';
for(var i=0; i< 10; i++) {
content += '<li class="news__item">'+(++index)+'、hello world</li>'
}
var node = document.getElementById('news');
// 向节点内插入新生成的数据
var oldContent = node.innerHTML;
node.innerHTML = oldContent+content;
}vue에서 구현하려면 지침을 사용하세요.
왜 지침을 사용하여 구현해야 하나요? 명령어만 기본 DOM을 얻을 수 있는 것 같나요? 무한 로딩을 달성하려면 콘텐츠 높이를 얻어야 합니다.
// components/Index.vue
<template>
<p>
<ul class="news">
<li class="news__item" v-for="(news, index) in newslist">
{{index}}-{{news.title}}
</li>
</ul>
</p>
</template>
<style>
.news__item {
height: 80px;
border: 1px solid #ccc;
margin-bottom: 20px;
}
</style>
<script>
export default{
data(){
return{
newslist: [
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'},
{title: 'hello world'}
]
}
}
}
</script>directives: {
scroll: {
bind: function (el, binding){
window.addEventListener('scroll', ()=> {
if(document.body.scrollTop + window.innerHeight >= el.clientHeight) {
console.log('load data');
}
})
}
}
}또한 바인딩은 후크 함수 매개변수인 el과 바인딩이라는 두 개의 매개변수가 있는 함수에 해당한다는 것을 알 수 있습니다. 예를 들어 el은 바인딩된 노드에 해당하고 바인딩에는 명령에 제공된 매개변수 전달 등과 같은 많은 데이터
<template>
<p v-scroll="loadMore">
<ul class="news">
<li class="news__item" v-for="(news, index) in newslist">
{{index}}-{{news.title}}
</li>
</ul>
</p>
</template>methods: {
loadMore() {
let newAry = [];
for(let i = 0; i < 10; i++) {
newAry.push({title: 'hello world'})
}
this.newslist = [...this.newslist, ...newAry];
}
}
window.addEventListener('scroll', ()=> {
if(document.body.scrollTop + window.innerHeight >= el.clientHeight) {
let fnc = binding.value;
fnc();
}
})Optimization
위의 예는 실제로 인터페이스에서 데이터를 가져오지 않으므로 숨겨진 버그가 있습니다. 인터페이스 응답 매우 느린 상황에서 아래쪽으로 스크롤하여 데이터를 로드할 때 약간의 스크롤만으로도 데이터 수집 기능이 트리거되어 동시에 여러 인터페이스 요청이 발생하고 한 번에 많은 양의 데이터가 반환됩니다.
var scrollDisable = false;
window.addEventListener('scroll', function() {
var scrollTop = document.body.scrollTop;
if(scrollTop + window.innerHeight >= document.body.clientHeight) {
// 触发加载数据
if(!scrollDisable) {
//
loadMore();
}
}
});
// 表示列表的序号
var index = 10;
function loadMore() {
// 开始加载数据,就不能再次触发这个函数了
scrollDisable = true;
var content = '';
for(var i=0; i< 10; i++) {
content += '<li class="news__item">'+(++index)+'、hello world</li>'
}
var node = document.getElementById('news');
// 向节点内插入新生成的数据
var oldContent = node.innerHTML;
node.innerHTML = oldContent+content;
// 插入数据完成后
scrollDisable = false;
}Vue2 Vue-cli에서 Typescript를 사용하는 구성 소개 정보
#🎜🎜 # Vue 댓글 프레임워크 구현에 대해(상위 컴포넌트 구현)
위 내용은 간단한 vue 무한 로딩 지침을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!