Какие поддерживаются модификаторы кнопок мыши?vue-22

Vue.js предоставляет удобные модификаторы для обработки различных событий мыши, что позволяет легко определять, какая именно кнопка была нажата. Эти модификаторы работают с любыми событиями мыши (click, mousedown, mouseup и др.).

Основные модификаторы кнопок мыши

1. Стандартные модификаторы

Vue поддерживает три основных модификатора для кнопок мыши:

<template>
  <!-- Левая кнопка мыши (используется по умолчанию) -->
  <button @click.left="handleLeftClick">Левый клик</button>

  <!-- Правая кнопка мыши -->
  <div @mousedown.right="handleRightClick">Правый клик</div>

  <!-- Колесико мыши (средняя кнопка) -->
  <div @click.middle="handleMiddleClick">Клик колесиком</div>
</template>

2. Комбинации с клавишами-модификаторами

Модификаторы кнопок мыши можно комбинировать с клавиатурными модификаторами:

<div @click.ctrl.left="handleCtrlLeftClick">Ctrl + Левый клик</div>
<button @mousedown.shift.right="handleShiftRightClick">Shift + Правый клик</button>

Особые случаи использования

1. Контекстное меню

Для предотвращения стандартного контекстного меню при правом клике:

<div @contextmenu.prevent.right="showCustomContextMenu">
  Пользовательское контекстное меню
</div>

2. Drag-and-drop операции

Пример использования для элементов перетаскивания:

<div
  @mousedown.left="startDrag"
  @mouseup.left="endDrag"
  @mousemove="handleDrag"
>
  Перетащи меня
</div>

3. Двойной клик

Хотя .middle и .right работают с @dblclick, это редко имеет практический смысл:

<div @dblclick.right="unusualHandler">Двойной правый клик</div>

Ограничения и особенности

  1. Модификатор .middle может работать не на всех устройствах, особенно на тачпадах ноутбуков
  2. Touch-устройства эмулируют события мыши, но поведение может отличаться
  3. Браузерные различия:
    • В некоторых браузерах средний клик на ссылке открывает ее в новой вкладке
    • Правая кнопка может быть отключена для некоторых элементов

Практический пример: Кастомный компонент

<template>
  <div class="drawing-board"
       @mousedown.left="startDrawing"
       @mouseup.left="stopDrawing"
       @mousemove="handleDrawing"
       @click.right.prevent="showColorPicker">
    <!-- Холст для рисования -->
  </div>
</template>

<script>
export default {
  methods: {
    startDrawing(e) {
      if (e.button !== 0) return; // Дополнительная проверка
      this.isDrawing = true;
    },
    showColorPicker() {
      this.showPicker = true;
    }
  }
}
</script>

Лучшие практики

  1. Всегда учитывайте доступность ваших интерфейсов
  2. Для критичных функций дублируйте управление (не полагайтесь только на правый клик)
  3. Используйте .prevent с правым кликом, если переопределяете стандартное поведение
  4. Тестируйте на разных устройствах и браузерах

Резюмируем:

Vue.js предлагает три основных модификатора кнопок мыши (.left, .right, .middle), которые можно гибко комбинировать с другими модификаторами для создания богатых интерактивных интерфейсов. Правильное использование этих модификаторов позволяет создавать удобные и функциональные UI-компоненты.