Как я могу обнаружить щелчок за пределами моего элемента? Я использую Vue.js, поэтому он будет вне моего элемента шаблонов. Я знаю, как это сделать в Vanilla JS, но не уверен, есть ли более правильный способ сделать это, когда я использую Vue.js?
Это решение для Vanilla JS: событие Javascript Detect Click за пределами div
Думаю, я могу использовать лучший способ получить доступ к элементу?
javascript
vue.js
Сообщество
источник
источник
Ответы:
Можно хорошо решить, настроив настраиваемую директиву один раз:
Использование:
В компоненте:
Рабочая демонстрация на JSFiddle с дополнительной информацией о предостережениях:
https://jsfiddle.net/Linusborg/yzm8t8jq/
источник
Я использовал решение, основанное на ответе Линуса Борга и отлично работающее с vue.js 2.0.
Вы привязываетесь к нему, используя
v-click-outside
:Вот небольшая демонстрация
Вы можете найти дополнительную информацию о пользовательских директивах и о том , что означает el, binding, vnode, в https://vuejs.org/v2/guide/custom-directive.html#Directive-Hook-Arguments
источник
Добавьте
tabindex
атрибут к вашему компоненту, чтобы его можно было сфокусировать, и выполните следующие действия:источник
outline: none;
фокус для элемента.В сообществе доступны два пакета для этой задачи (оба поддерживаются):
источник
vue-clickaway
пакет отлично решил мою проблему. СпасибоЭто сработало для меня с Vue.js 2.5.2:
источник
источник
Я объединил все ответы (включая строку из vue-clickaway) и придумал это решение, которое мне подходит:
Использование в компоненте:
источник
Я обновил ответ MadisonTrash для поддержки Mobile Safari ( вместо него необходимо использовать
click
событиеtouchend
). Это также включает проверку, чтобы событие не запускалось перетаскиванием на мобильных устройствах.источник
Я использую этот код:
кнопка показать-скрыть
показать-скрыть элемент
сценарий
Обновление: удалить часы; добавить остановку распространения
источник
Я ненавижу дополнительные функции, поэтому ... вот отличное решение vue без дополнительных методов vue, только var
источник
Если вы специально ищете щелчок за пределами элемента, но все еще внутри родительского элемента, вы можете использовать
Я использую это для модальных окон.
источник
Вы можете зарегистрировать два прослушивателя событий для события щелчка, как это
источник
источник
Краткий ответ: это нужно делать с помощью специальных директив .
Здесь есть много отличных ответов, которые также говорят об этом, но большинство ответов, которые я видел, ломаются, когда вы начинаете широко использовать внешний щелчок (особенно многоуровневый или с несколькими исключениями). Я написал статью о среде, в которой рассказывается о нюансах пользовательских директив и, в частности, о реализации этой. Возможно, он не охватывает все крайние случаи, но он охватил все, что я придумал.
Это будет учитывать несколько привязок, несколько уровней исключений других элементов и позволит вашему обработчику управлять только «бизнес-логикой».
Вот код, по крайней мере, для его части определения, ознакомьтесь со статьей для полного объяснения.
источник
Я сделал это немного по-другому, используя функцию в created ().
Таким образом, если кто-то щелкает за пределами элемента, то в моем случае мобильная навигация скрывается.
Надеюсь это поможет!
источник
На этот вопрос уже есть много ответов, и большинство из них основаны на аналогичной идее настраиваемой директивы. Проблема с этим подходом заключается в том, что нужно передать функцию метода в директиву и нельзя напрямую писать код, как в других событиях.
Я создал новый пакет,
vue-on-clickout
который отличается. Проверьте это на:Это позволяет писать
v-on:clickout
же, как и любые другие события. Например, вы можете написатьи это работает.
Обновить
vue-on-clickout
теперь поддерживает Vue 3!источник
Просто если кто-нибудь смотрит как скрыть модальное окно при нажатии вне модального окна. Поскольку у модального окна обычно есть обертка с классом
modal-wrap
или любым другим именем, вы можете установить@click="closeModal"
оболочку. Используя обработку событий, указанную в документации vuejs, вы можете проверить, находится ли выбранная цель либо на оболочке, либо в модальном окне.источник
Решения @Denis Danilenko работают для меня, вот что я сделал: Кстати, я использую VueJS CLI3 и NuxtJS здесь и с Bootstrap4, но он также будет работать на VueJS без NuxtJS:
источник
Вы можете создать собственное событие javascript из директивы. Создайте директиву, которая отправляет событие из узла, используя node.dispatchEvent
Что можно использовать так
источник
Я создаю div в конце тела вот так:
Где .outside:
А away () - это метод в экземпляре Vue:
Легко, работает хорошо.
источник
Если у вас есть компонент с несколькими элементами внутри корневого элемента, вы можете использовать это решение It just works ™ с логическим значением.
источник
Используйте этот пакет vue-click-outside
Это просто и надежно, в настоящее время используется многими другими пакетами. Вы также можете уменьшить размер пакета javascript, вызывая пакет только в необходимых компонентах (см. Пример ниже).
npm install vue-click-outside
Использование :
источник
Не изобретайте велосипед, используйте этот пакет v-click-outside
источник
Вы можете создать новый компонент, который обрабатывает внешний щелчок
И используйте этот компонент:
источник
часто люди хотят знать, покидает ли пользователь корневой компонент (работает с компонентами любого уровня)
источник
У меня есть решение для обработки выпадающего меню переключения:
источник
Я использую этот пакет: https://www.npmjs.com/package/vue-click-outside
Он отлично работает для меня
HTML:
Мои коды скриптов:
источник