要素の外側のクリックを「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;
},
},
});