要素の外側のクリックを「vue-clickaway」で検出する

by kabanoki

HTML

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-clickaway.min.js"></script>
<div id="app">
  <p id="clickaway" v-on-clickaway="away" @click="openMenu">ここをクリックでメニューを開く</p>
  <p>外側をクリックでメニューを閉じる</p>
  <div id="box">
    <ul v-show="open">
      <li>メニュー1</li>
      <li>メニュー2</li>
      <li>メニュー3</li>
      <li>メニュー4</li>
    </ul>
  </div>
</div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-clickaway.min.js"></script>

CSS

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

p#clickaway {
  padding:15px;
  border: 1px solid #000;
}
div#box {
  padding:10px;
  width: 20%;
}
div#box ul {
  border: 1px solid #000;
}

div#box ul li{
  padding:5px;
  border: 1px solid #000;
}

Vue

const clickaway = window.VueClickaway.mixin;

let app = new Vue({
  el: '#app',
  mixins: [ clickaway ],
  data: {
    open: false
  },
  methods: {
    openMenu:function(){
      this.open = true;
    },
    away: function() {
      this.open = false;
    },
  },
});