Vue
by Alex Kyriakidis
HTML
<div id="app">
<h2>Click Outside</h2>
<div v-click-outside="clickedOutside" class="box">
Here is some text
</div>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
.box {
border: 2px solid purple;
width: 200px;
height: 100px;
}
Vue
new Vue({
el: "#app",
data: {},
directives: {
clickOutside: {
bind (el, binding) {
el.__ClickOutsideHandler__ = event => {
if (!(el === event.target || el.contains(event.target))) {
binding.value(event)
}
}
document.body.addEventListener('click', el.__ClickOutsideHandler__)
},
unbind (el) {
document.body.removeEventListener('click', el.__ClickOutsideHandler__)
}
}
},
methods: {
clickedOutside () {
alert('you clicked outside 👏')
}
}
})