@vuemod/vue-touch

Установка

yarn add @vuemod/vue-touch

Ресурсы

  • default - plugin: все директивы устанавливаются глоабльно (touch, scroll, touch-classes, touch-tolerance)
  • {defineTouch} - фукция криейтор директивы v-touch - позволяет указать настройки
  • {touch} - готовая директива с настройками по умолчанию
  • {scroll} - готовая директива scroll (прокрутка window)

Подключение глобально

import touch from "@vuemod/vue-touch";
import type {VueTouch} from "@vuemod/vue-touch";

const app = createApp(App); // App - common component
app.use(touch, {} as VueTouch.Options); // options is optional

При глобальной утановке будут добавлены директивы:

  • v-touch - подключение обработчиков событий
  • v-touch-scroll - обработчик скрола окна
  • v-touch-classes - изменение классов событий
  • v-touch-tolerance - изменение настроек

Подключение локально

import {defineTouch} from "@vuemod/vue-touch";
import type {VueTouch} from "@vuemod/vue-touch";
import {defineComponent} from "vue";

const app = createApp(defineComponent({
    directives: {
        touch: defineComponent({} as VueTouch.Options)
    }
})); // App - common component

Пример использования

<template>
    <div v-touch:tap:10="onTap">Test Event</div>
</template>

<script lang="ts">
    import {defineComponent} from "vue";
    import type {VueTouchEvent} from "@vuemod/vue-touch";

    export default defineComponent({
        name: "App",
        methods: {
            onAll(event: VueTouchEvent) {
                console.log(event);
            }
        }
    });

</script>

События и модификаторы

События

  • * - все события
  • hover - указатель мыши над элементом
  • press - срабатывает, когда пользователь нажимает на элемент
  • tap - щелчек мышкой или нажатие на экран (срабатывает при отпускании)
  • dbltap - двойной щелчек или касание (срабатывает при отпускании)
  • longtap - срабатывает при удержании tolerance.longtap и отпускании
  • hold - срабатывает при удержании tolerance.hold
  • leave - указатель покинул элемент
  • rollover - срабатывает при движении по элементу (c учетом толерантности tap)
  • swipe - Срабатывает при свайпе по элементу (доп. модификаторы left, right, top, bottom, multi)
  • drag - Срабатывает при перетаскивании элемента (доп. модификаторы left, right, top, bottom, multi)
  • dragstart - Срабатывает при старте перетаскивания
  • release - Срабатывает при отпускании элемента
  • scroll - Срабатывает скроле элемента

Общие модификаторы:

  • stop
  • prevent
  • capture
  • self
  • once
  • passive

Специальные модификаторы

  • left
  • right
  • top
  • bottom
  • multi
  • debounce

Нагрузка события

v-touch

interface VueTouchEvent {
    originalEvent: Event,
    type: VueTouch.events,
    direction: "left"|"right"|"top"|"bottom",
    currentXY: number[],
    multi: number,
    shiftXY: number[],
    scale: 0|1|-1,
    scroll: number[]
}
  • originalEvent - оризинальное событие
  • type - тип события
  • direction - направление движения left, right, top, bottom
  • multi - количество точек касания для тач экранов
  • currentXY - масив координат текущего положения касания или указателя
  • shiftXY - координаты левого верхнего угла блока (для drag)
  • scale - указатель масштабирования -1 уменьшение, 0 - без изменений, 1 - увеличение
  • scroll - параметры скрола [x, y]

v-touch-scroll

interface VueTouchScrollEvent {
    originalEvent: event,
    scroll: [number, number]
}
  • originalEvent - оризинальное событие
  • scroll - параметры скрола [x, y]

Настройки

interface Options {
    classes?: {
        hover?: string,
        leave?: string,
        press?: string,
        tap?: string,
        dbltap?:string,
        multi?:string,
        longtap?: string,
        hold?: string,
        rollover?: string,
        swipe?: string,
        drag?: string,
        release?: string,
    } // classes for all state of component
    tolerance?: { // in ms
        tap?: number, // in px
        multi?: number, // in px
        dbltap?: number, // on pc it auto
        longtap?: number,
        hold?: number,
        timeout?: number,
        debounce?: number,
        drag?: number, // min distance in px
        swipe?: number
    } // in ms
}

Класы по умолчанию


    hold: "v-touch-hold",
    press: "v-touch-press",
    multi: "v-touch-multi",
    dbltap: "v-touch-dbltap",
    tap: "v-touch-tap",
    longtap: "v-touch-longtap",
    hover: "v-touch-hover",
    leave: "v-touch-leave",
    rollover: "v-touch-rollover",
    swipe: "v-touch-swipe",
    dragstart: "v-touch-dragstart",
    drag: "v-touch-drag",
    release: "v-touch-release",