Vue를 사용하여 무한 스크롤 및 폭포 흐름 레이아웃을 구축하는 방법은 무엇입니까?
Vue.js는 개발자가 동적이고 반응성이 뛰어난 웹 애플리케이션을 쉽게 만들 수 있는 인기 있는 JavaScript 프레임워크입니다. 그 중에서도 특히 강력한 구성 요소 개발 기능으로 인해 개발자들에게 선호됩니다. 무한 스크롤링과 워터폴 레이아웃은 현대 웹 개발에서 없어서는 안 될 기능 중 하나가 되었습니다.
이 글의 목적은 Vue.js를 일부 타사 라이브러리와 결합하여 무한 스크롤 및 워터폴 레이아웃 기능을 구현하는 방법을 소개하는 것입니다.
무한 스크롤 달성
무한 스크롤은 페이지 하단으로 스크롤할 때 계속해서 더 많은 콘텐츠를 로드하여 페이지 콘텐츠의 무한 확장을 달성하는 것을 말합니다. 이 기술은 수천 개의 데이터 항목에 적용되며 사용자 경험을 크게 향상시킬 수 있습니다.
데이터 소스 준비
먼저 최소한 일부 데이터 항목이 포함된 데이터 소스를 준비해야 합니다. 여기서는 설명하기 위해 간단한 예를 사용합니다. 100개의 데이터 항목이 포함된 무한 스크롤 가능한 목록이 있다고 가정하면 데이터 소스는 다음과 같습니다.
[ {id: 1, text: 'Item 1'}, {id: 2, text: 'Item 2'}, // ... more data {id: 99, text: 'Item 99'}, {id: 100, text: 'Item 100'}, ]
vue-infinite-scroll 라이브러리를 설치하고 사용합니다
다음에는 무한 스크롤 기능의 핵심 메커니즘과 필요한 지시문 및 구성 요소를 제공하는 vue-infinite-scroll이라는 라이브러리입니다. 이 라이브러리를 설치하려면 npm 명령을 사용할 수 있습니다.
npm install vue-infinite-scroll
필요한 지침을 전역적으로 등록합니다.
import infiniteScroll from 'vue-infinite-scroll' Vue.use(infiniteScroll)
구성 요소에서 일부 구성 및 데이터를 설정해야 합니다.
<template> <div class="scroll-list" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <ul> <li v-for="(item, index) in items" :key="index">{{ item.text }}</li> </ul> <div v-if="busy" class="loading"> Loading ... </div> </div> </template> <script> export default { data () { return { items: [], // 当前列表所有数据 busy: false, // 标记是否正在请求数据 page: 1, // 当前数据分页 perPage: 10, // 每页数量 total: 100, // 总数据量 } }, methods: { loadMore() { // 标记正在加载数据 this.busy = true // 模拟请求延迟 setTimeout(() => { // 构造新数据 const newItems = [] const from = (this.page - 1) * this.perPage + 1 const to = this.page * this.perPage for (let i = from; i <= to && i <= this.total; i++) { newItems.push({ id: i, text: 'Item ' + i }) } // 加载新数据 this.items = [...this.items, ...newItems] // 增加当前页数 this.page++ // 去除加载数据标记 this.busy = false }, 1000) } } } </script>
코드 설명
v- 무한 -scroll="loadMore"
: 더 많은 데이터를 로드하기 위한 콜백 함수를 지정하는 데 사용v-infinite-scroll="loadMore"
:用于指定加载更多数据的回调函数infinite-scroll-disabled="busy"
:用于指定当前是否正在请求数据infinite-scroll-distance="10"
infinite-scroll-disabled="busy"
: 현재 데이터가 요청되고 있는지 여부를 지정하는 데 사용 infinite-scroll-distance="10"
: 하단에서 스크롤 막대의 픽셀 수를 지정할 때 데이터 로드 동작을 트리거하는 데 사용됩니다
폭포 흐름 레이아웃 구현Waterfall은 공통 레이아웃의 핵심 개념은 다양한 크기의 항목이 동일한 행에 나타날 수 있으며 폭포 흐름 레이아웃은 항목 수에 따라 자동으로 조정된다는 것입니다. vue-waterfall이라는 Vue 타사 구성 요소 라이브러리를 사용하면 단 몇 줄의 코드만으로 폭포 레이아웃을 쉽게 구현할 수 있습니다. vue-waterfall 라이브러리 설치 및 사용먼저 vue-waterfall 구성 요소 라이브러리를 설치해야 합니다. npm install vue-waterfall
import waterfall from 'vue-waterfall'
Vue.use(waterfall)
로그인 후 복사
그런 다음 구성 요소에서 폭포 흐름 레이아웃을 사용할 수 있습니다. import waterfall from 'vue-waterfall' Vue.use(waterfall)
<template> <waterfall> <div v-for="(item, index) in items" :key="index"> <h3>{{item.title}}</h3> <p>{{item.desc}}</p> <img :src="item.imgUrl" :alt="item.title"> </div> </waterfall> </template> <script> import axios from 'axios' export default { data () { return { items: [] } }, created () { axios.get('https://api.example.com/items').then(response => { this.items = response.data }) } } </script>
이 코드는 axios 라이브러리를 사용하여 데이터 소스에서 데이터를 가져옵니다. 데이터 구조는 대략 다음과 같습니다.
[ { title: 'Item 1', desc: 'This is item 1', imgUrl: 'https://example.com/item1.png', }, { title: 'Item 2', desc: 'This is item 2', imgUrl: 'https://example.com/item2.png', }, // ... ]
npm install vue-virtual-scroll-list
<template>
<virtual-scroll-list :size="75" :remain="10" :items="items" :key-field="'id'">
<div slot-scope="{item}">
<h3>{{item.title}}</h3>
<p>{{item.desc}}</p>
<img :src="item.imgUrl" :alt="item.title">
</div>
</virtual-scroll-list>
</template>
<script>
import axios from 'axios'
import VirtualScrollList from 'vue-virtual-scroll-list'
export default {
components: { VirtualScrollList },
data () {
return {
items: []
}
},
created () {
axios.get('https://api.example.com/items').then(response => {
this.items = response.data
})
}
}
</script>
로그인 후 복사
그 중 vue-waterfall 구성 요소를 vue-virtual로 대체합니다. -scroll-list 구성 요소, 가상 스크롤 효과를 얻기 위한 것입니다. 부분 로드구성 요소 렌더링의 스트레스를 줄이는 또 다른 방법은 데이터를 부분적으로 로드하는 것입니다. 이 방식은 앞에서 언급한 무한 스크롤과 유사하지만 데이터를 로드할 때 모든 데이터를 한 번에 가져오는 것이 아니라 요청에 따라 분할된 데이터를 로드합니다. 분할 로딩을 구현하는 방법은 무엇입니까? 간단한 해결책은 한 번에 처음 N개의 데이터만 로드한 다음 사용자가 맨 아래로 스크롤한 후 다음 데이터 조각을 로드하는 것입니다. 이 방법은 데이터 양이 상대적으로 많은 상황에 적합합니다. <template> <virtual-scroll-list :size="75" :remain="10" :items="items" :key-field="'id'"> <div slot-scope="{item}"> <h3>{{item.title}}</h3> <p>{{item.desc}}</p> <img :src="item.imgUrl" :alt="item.title"> </div> </virtual-scroll-list> </template> <script> import axios from 'axios' import VirtualScrollList from 'vue-virtual-scroll-list' export default { components: { VirtualScrollList }, data () { return { items: [] } }, created () { axios.get('https://api.example.com/items').then(response => { this.items = response.data }) } } </script>
<template>
<div class="scroll-list" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
<ul>
<li v-for="(item, index) in items" :key="index">{{ item.text }}</li>
</ul>
<div v-if="busy" class="loading">
Loading ...
</div>
</div>
</template>
<script>
export default {
data () {
return {
items: [], // 当前列表所有数据
busy: false, // 标记是否正在请求数据
page: 1, // 当前数据分页
perPage: 10, // 每页数量
total: 100, // 总数据量
}
},
methods: {
loadMore() {
// 标记正在加载数据
this.busy = true
// 模拟请求延迟
setTimeout(() => {
// 构造新数据
const newItems = []
const from = (this.page - 1) * this.perPage + 1
const to = this.page * this.perPage
for (let i = from; i <= to && i <= this.total; i++) {
newItems.push({
id: i,
text: 'Item ' + i
})
}
// 加载新数据
if (this.page <= 10) {
this.items = [...this.items, ...newItems]
// 增加当前页数
this.page++
} else {
this.busy = true
}
// 去除加载数据标记
this.busy = false
}, 1000)
}
}
}
</script>
로그인 후 복사이 코드에서는 loadMore 함수를 수정했습니다. 이제 데이터의 처음 10페이지만 가져옵니다. 이렇게 하면 데이터가 많아도 점차적으로 로딩을 함으로써 컴포넌트에 대한 부담을 줄일 수 있다.
요약🎜🎜이 기사에서는 Vue.js를 사용하여 무한 스크롤 및 폭포 레이아웃 기능을 만드는 방법을 소개하고 구성 요소 성능을 향상시키기 위한 몇 가지 최적화 조치도 구현했습니다. 일반적으로 vue-infinite-scroll, vue-waterfall 및 vue-virtual-scroll-list 세 가지 라이브러리는 작업을 완료하는 데 충분하지만 실제 개발에서는 다양한 시나리오와 다양한 데이터 구조도 고려해야 합니다. 귀하의 현재 프로젝트에 가장 적합한 솔루션입니다. 🎜<template> <div class="scroll-list" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <ul> <li v-for="(item, index) in items" :key="index">{{ item.text }}</li> </ul> <div v-if="busy" class="loading"> Loading ... </div> </div> </template> <script> export default { data () { return { items: [], // 当前列表所有数据 busy: false, // 标记是否正在请求数据 page: 1, // 当前数据分页 perPage: 10, // 每页数量 total: 100, // 总数据量 } }, methods: { loadMore() { // 标记正在加载数据 this.busy = true // 模拟请求延迟 setTimeout(() => { // 构造新数据 const newItems = [] const from = (this.page - 1) * this.perPage + 1 const to = this.page * this.perPage for (let i = from; i <= to && i <= this.total; i++) { newItems.push({ id: i, text: 'Item ' + i }) } // 加载新数据 if (this.page <= 10) { this.items = [...this.items, ...newItems] // 增加当前页数 this.page++ } else { this.busy = true } // 去除加载数据标记 this.busy = false }, 1000) } } } </script>
위 내용은 Vue를 사용하여 무한 스크롤 및 폭포 흐름 레이아웃을 구축하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HTML 템플릿의 버튼을 메소드에 바인딩하여 VUE 버튼에 함수를 추가 할 수 있습니다. 메소드를 정의하고 VUE 인스턴스에서 기능 로직을 작성하십시오.

vue.js에서 bootstrap 사용은 5 단계로 나뉩니다 : Bootstrap 설치. main.js.의 부트 스트랩 가져 오기 부트 스트랩 구성 요소를 템플릿에서 직접 사용하십시오. 선택 사항 : 사용자 정의 스타일. 선택 사항 : 플러그인을 사용하십시오.

vue.js에서 JS 파일을 참조하는 세 가지 방법이 있습니다. & lt; script & gt; 꼬리표;; mounted () 라이프 사이클 후크를 사용한 동적 가져 오기; Vuex State Management Library를 통해 수입.

vue.js의 시계 옵션을 사용하면 개발자가 특정 데이터의 변경 사항을들을 수 있습니다. 데이터가 변경되면 콜백 기능을 트리거하여 업데이트보기 또는 기타 작업을 수행합니다. 구성 옵션에는 즉시 콜백을 실행할지 여부와 DEEP를 지정하는 즉시 포함되며, 이는 객체 또는 어레이에 대한 변경 사항을 재귀 적으로 듣는 지 여부를 지정합니다.

vue.js는 이전 페이지로 돌아갈 수있는 네 가지 방법이 있습니다. $ router.go (-1) $ router.back () 사용 & lt; router-link to = & quot;/quot; Component Window.history.back () 및 메소드 선택은 장면에 따라 다릅니다.

VUE 멀티 페이지 개발은 vue.js 프레임 워크를 사용하여 응용 프로그램을 구축하는 방법입니다. 여기서 응용 프로그램은 별도의 페이지로 나뉩니다. 코드 유지 보수 : 응용 프로그램을 여러 페이지로 분할하면 코드를보다 쉽게 관리하고 유지 관리 할 수 있습니다. 모듈 식 : 각 페이지는 쉬운 재사용 및 교체를 위해 별도의 모듈로 사용할 수 있습니다. 간단한 라우팅 : 페이지 간의 탐색은 간단한 라우팅 구성을 통해 관리 할 수 있습니다. SEO 최적화 : 각 페이지에는 자체 URL이있어 SEO가 도움이됩니다.

vue.js의 Foreach 루프는 V-For 지시문을 사용하여 개발자가 각 요소를 배열 또는 객체에서 반복하고 각 요소에서 특정 작업을 수행 할 수 있습니다. 구문은 다음과 같습니다. & lt; template & gt; & lt; ul & gt; & lt; li v-for = & quot; 항목의 항목 & gt; {{item}} & lt;/li & gt; & lt;/ul & gt; & lt;/template & gt; & am

VUE의 기능 차단은 지정된 기간 내에 기능이 호출되는 횟수를 제한하고 성능 문제를 방지하는 데 사용되는 기술입니다. 구현 방법은 다음과 같습니다. lodash 라이브러리 가져 오기 : 'lodash'에서 import {debounce}; Debounce 기능을 사용하여 인터셉트 기능을 만듭니다. const debouncedfunction = debounce (() = & gt; { / logical /}, 500); 인터셉트 함수를 호출하면 제어 기능이 최대 500 밀리 초 안에 한 번 호출됩니다.
