v-click-outside.js 834 B

12345678910111213141516171819202122232425262728
  1. export default {
  2. install(Vue) {
  3. Vue.directive('click-outside', {
  4. bind(el, binding) {
  5. function documentHandler(e) {
  6. if (el.contains(e.target)) {
  7. return false
  8. }
  9. if (binding.expression) {
  10. binding.value(e)
  11. }
  12. }
  13. el.__vueClickOutside__ = documentHandler
  14. if (binding.modifiers.click) {
  15. document.addEventListener('click', documentHandler)
  16. }
  17. if (binding.modifiers.mousedown) {
  18. document.addEventListener('mousedown', documentHandler)
  19. }
  20. },
  21. unbind(el) {
  22. document.removeEventListener('click', el.__vueClickOutside__)
  23. document.removeEventListener('mousedown', el.__vueClickOutside__)
  24. delete el.__vueClickOutside__
  25. }
  26. })
  27. }
  28. }