Skip to content

Instantly share code, notes, and snippets.

@achmadfatoni
Created September 20, 2016 04:11
Show Gist options
  • Save achmadfatoni/dc7a4fd0e8ce756b9941c57d90170069 to your computer and use it in GitHub Desktop.
Save achmadfatoni/dc7a4fd0e8ce756b9941c57d90170069 to your computer and use it in GitHub Desktop.
Vuejs reusable modal
<template>
<div class="modal-mask" v-show="show" @click="close" transition="modal">
<div class="modal-container" @click.stop>
<slot></slot>
</div>
</div>
</template>
<style>
* {
box-sizing: border-box;
}
.modal-mask {
position: fixed;
z-index: 9998;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, .5);
transition: opacity .3s ease;
}
.modal-container {
width: 300px;
margin: 40px auto 0;
padding: 20px 30px;
background-color: #fff;
border-radius: 2px;
box-shadow: 0 2px 8px rgba(0, 0, 0, .33);
transition: all .3s ease;
font-family: Helvetica, Arial, sans-serif;
}
.modal-header h3 {
margin-top: 0;
color: #42b983;
}
.modal-body {
margin: 20px 0;
}
.text-right {
text-align: right;
}
.form-label {
display: block;
margin-bottom: 1em;
}
.form-label > .form-control {
margin-top: 0.5em;
}
.form-control {
display: block;
width: 100%;
padding: 0.5em 1em;
line-height: 1.5;
border: 1px solid #ddd;
}
.modal-enter, .modal-leave {
opacity: 0;
}
.modal-enter .modal-container,
.modal-leave .modal-container {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
</style>
<script>
export default{
props: ['show', 'onClose'],
methods: {
close: function () {
this.onClose();
}
},
ready() {
document.addEventListener("keydown", (e) => {
if (this.show && e.keyCode == 27) {
this.close();
}
});
}
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment