В кратце: использую библиотеку для ленивой загрузки, называется vue-intersection (версия vue 2) код вывода: <template> <IntersectionRoot class="meal-list" :threshold="[0.1]" :rootMargin="rootMargin"> <IntersectionChild v-for="item in items" :key="item.id" @enter="setItemVisibility(item.id)"> <div v-if="isItemVisible(item.id)" class="skeleton">Element visible</div> <div v-else class="skeleton">Element not visible</div> </IntersectionChild> </IntersectionRoot> </template> Вот методы и начальное значение: <script> import { IntersectionRoot, IntersectionChild } from 'vue-intersection' export default { components: { IntersectionRoot, IntersectionChild }, name: 'MealList', data() { return { visibleItems: [], rootMargin: "100px" } }, props: { items: Array } methods: { setItemVisibility(itemId) { if (!this.visibleItems.includes(itemId)) { this.visibleItems.push(itemId) } }, isItemVisible(itemId) { // Проверяем видимость элемента в реактивном свойстве return this.visibleItems.includes(itemId) || false; }, }, } </script> Проблема заключается в том, что они сразу становятся visible, может я как то неправильно использую реактивность?
Вот тут элементарная реализация без всяких библиотек https://vue-faq.org/book/ru/Chapter_11__Bonus_Chapter_-_UX_Patterns.html?v=2 Поищи по тексту по IntersectionObserver
а как вы текст в таком виде отправляете?
Обсуждают сегодня