Vue.js - это простой в использовании фреймворк для веб-приложений, который мы можем использовать для разработки интерактивных интерфейсных приложений.
В этой статье мы рассмотрим, как отслеживать видимость элементов и выполнять перетаскивание с помощью сторонних пакетов.
vue-наблюдение-видимость
Пакет vue-observe-visibility
позволяет нам следить за статусом видимости любого заданного HTML-элемента в шаблоне нашего компонента.
Он использует API-интерфейс Intersection Observer для отслеживания видимости элементов.
Мы можем установить его следующим образом:
npm install --save vue-observe-visibility
Кроме того, мы можем добавить его как скрипт в наш HTML-код следующим образом:
<script src="https://unpkg.com/vue-observe-visibility/dist/vue-observe-visibility.min.js"></script>
Тогда мы можем использовать его следующим образом:
main.js
import Vue from "vue"; import App from "./App.vue"; import VueObserveVisibility from "vue-observe-visibility"; Vue.use(VueObserveVisibility); Vue.config.productionTip = false; new Vue({ render: h => h(App) }).$mount("#app");
App.vue
<template> <div id="app"> <div v-for="n in 100" :key="n" v-observe-visibility="visibilityChanged">{{n}}</div> </div> </template> <script> export default { name: "App", methods: { visibilityChanged(isVisible, entry) { console.log( `${entry.target.innerText} is ${isVisible ? "visible" : "invisible"}` ); } } }; </script>
В приведенном выше коде мы зарегистрировали пакет VueObserveVisibility
в main.js
, чтобы мы могли использовать его во всем приложении.
Затем у нас есть App.vue
, в котором есть список div, в каждом из которых отображается число.
В каждом div мы используем директиву v-observe-visibility
с методом visibilityChanged
в свойстве methods
для регистрации видимости каждого элемента.
Объект entry
- это объект события, у которого есть свойство target
с отслеживаемым элементом.
Свойство invisible
- это логическое значение, которое указывает, является ли данный элемент видимым или нет.
Теперь, когда мы прокручиваем страницу вверх и вниз, мы видим что-то вроде:
... 31 is invisible 59 is visible 30 is invisible ...
из вывода журнала консоли по мере прокрутки.
Мы также можем добавить параметр once
к объекту, который мы передаем как значение директивы v-observe-visibility
, следующим образом:
<div v-observe-visibility="{ callback: visibilityChanged, once: true, }"> ... </div>
Таким образом, мы наблюдаем за видимостью элементов внутри только при первой загрузке элементов.
Кроме того, мы можем добавить параметр throttle
, чтобы обратный вызов не вызывался слишком часто. Например, мы можем написать:
<div v-observe-visibility="{ callback: visibilityChanged, throttle: 300, }"> ... </div>
Приведенный выше код задержит вызов visibilityChanged
callback buy на 300 мс.
Мы можем регулировать параметры, добавляя свойство throttleOptions
, которое принимает параметр leading
для запуска обратного вызова в первый раз, когда видимость изменяется, не дожидаясь задержки газа.
Это может быть visible
, hidden
или both
.
Кроме того, мы можем отключить наблюдателя на элементе, передав ложное значение следующим образом:
<div v-for="n in 100" :key="n" v-observe-visibility="n === 100 ? visibilityChanged : false" > //... </div>
В приведенном выше коде будет наблюдаться изменение видимости только последнего элемента.
v-перетащили
Директива v-dragged
позволяет с легкостью обрабатывать перетаскивание элементов.
Для его установки запускаем:
npm install --save v-dragged
Тогда мы можем использовать его следующим образом:
main.js
import Vue from "vue"; import App from "./App.vue"; import VDragged from "v-dragged"; Vue.use(VDragged); Vue.config.productionTip = false; new Vue({ render: h => h(App) }).$mount("#app");
App.vue
<template> <div id="app"> <div v-dragged="onDragged" id="drag">drag me</div> </div> </template> <script> export default { name: "App", methods: { onDragged({ el, deltaX, deltaY, offsetX, offsetY, clientX, clientY, first, last }) { if (first) { return; } if (last) { return; } const l = +window.getComputedStyle(el)["left"].slice(0, -2) || 0; const t = +window.getComputedStyle(el)["top"].slice(0, -2) || 0; el.style.left = `${l + deltaX}px`; el.style.top = `${t + deltaY}px`; } } }; </script> <style> #drag { position: absolute; } </style>
В приведенном выше коде у нас есть div с текстом «перетащите меня» внутрь. Мы привязываем его к директиве v-dragged
со значением, установленным для метода onDragged
.
В методе onDragged
мы можем получить новые координаты левого и верхнего края, используя метод window.getComputedStyle
с объектом элемента el
, который имеет перетаскиваемый элемент.
Затем мы можем использовать эти новые значения для установки новых стилей левого и верхнего, как мы это делали ниже:
el.style.left = `${l + deltaX}px`; el.style.top = `${t + deltaY}px`;
Мы добавили дельты к исходным левым и верхним значениям, чтобы обновить положение.
Кроме того, мы устанавливаем стиль перетаскиваемого элемента position: absolute;
, чтобы мы могли свободно перемещать его по странице.
Заключение
Пакет vue-observe-visibility
позволяет нам следить за видимостью элементов на экране. Обратный вызов, который вызывается при обновлении видимости, можно регулировать.
Пакет v-dragged
полезен для обработки событий перетаскивания. Мы можем использовать его для обновления положения перетаскиваемых элементов данными, предоставленными директивой.
Примечание команды разработчиков Plain English
Вы знали, что у нас четыре публикации? Проявите немного любви, предложив им следующие слова: JavaScript на простом английском, AI на простом английском, UX на простом английском , Python на простом английском - спасибо и продолжайте учиться!
Мы также запустили YouTube и хотели бы, чтобы вы поддержали нас, подписавшись на наш канал Plain English.
И, как всегда, Plain English помогает продвигать хороший контент. Если у вас есть статья, которую вы хотели бы отправить в какую-либо из наших публикаций, отправьте электронное письмо по адресу [email protected] с вашим именем пользователя Medium и тем, о чем вы хотите написать, и мы вернуться к вам!