Skip to content

Instantly share code, notes, and snippets.

@jocubeit
Created March 18, 2019 02:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jocubeit/035a0a7fd15d1f18ac5e6a3a1c5621e6 to your computer and use it in GitHub Desktop.
Save jocubeit/035a0a7fd15d1f18ac5e6a3a1c5621e6 to your computer and use it in GitHub Desktop.
Draggable Translucent Modal

Draggable Translucent Modal

Building off of a translucency exercise that I completed a few days ago. This one is even more fun!

A Pen by Jesse Couch on CodePen.

License.

<button id="modal-trigger" data-buttonTitle="Open Modal">Open Modal</button>
<div id="modal">
<div id="content">I'm a modal. Drag me around.</div>
<div id="background"></div>
</div>
// draggable plugin
(function($) {
$.fn.drags = function(opt) {
opt = $.extend({handle:"",cursor:"move"}, opt);
if(opt.handle === "") {
var $el = this;
} else {
var $el = this.find(opt.handle);
}
return $el.css('cursor', opt.cursor).on("mousedown", function(e) {
if(opt.handle === "") {
var $drag = $(this).addClass('draggable');
} else {
var $drag = $(this).addClass('active-handle').parent().addClass('draggable');
}
var z_idx = $drag.css('z-index'),
drg_h = $drag.outerHeight(),
drg_w = $drag.outerWidth(),
pos_y = $drag.offset().top + drg_h - e.pageY,
pos_x = $drag.offset().left + drg_w - e.pageX;
$drag.css('z-index', 1000).parents().on("mousemove", function(e) {
$('.draggable').offset({
top:e.pageY + pos_y - drg_h,
left:e.pageX + pos_x - drg_w
}).on("mouseup", function() {
$(this).removeClass('draggable').css('z-index', z_idx);
});
});
e.preventDefault(); // disable selection
}).on("mouseup", function() {
if(opt.handle === "") {
$(this).removeClass('draggable');
} else {
$(this).removeClass('active-handle').parent().removeClass('draggable');
}
});
}
})(jQuery);
$('#modal').drags();
$('#modal-trigger').click(function(){
$(this).addClass('hide');
$('#modal').addClass('show');
});
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
*, *:before, *:after {
box-sizing:border-box;
}
body,html {
height:100%;
max-height:100%;
font-family:helvetica neue, helvetica, arial, sans-serif;
font-size:20px;
font-weight:200;
line-height:20px;
}
body {
background-image:url(https://unsplash.imgix.net/45/tkLOe7nnQ7mnMsiuijBy_hm.jpg?q=75&fm=jpg&auto=format&s=f370fb6d5c06573c5aa7d1f1ae41f1df);
background-size:cover;
background-position:center center;
background-attachment:fixed;
position:relative;
overflow:auto;
#modal-trigger {
display:block;
position:relative;
top:100px;
margin:0 auto;
padding:0 60px;
border-radius:50px;
border:none;
background:inherit;
overflow:hidden;
font-size:20px;
font-family:helvetica neue, helvetica, arial, sans-serif;
font-weight:200;
line-height:100px;
box-shadow:0 0 50px 5px rgba(0,0,0,.2);
opacity:1;
&.hide {
opacity:0;
}
&:before {
content:'';
display:block;
position:absolute;
z-index:1;
top:-50px;
left:-50px;
height:calc(100% + 100px);
width:calc(100% + 100px);
background:inherit;
-webkit-filter:blur(10px) saturate(1.5);
}
&:after {
content:attr(data-buttonTitle);
display:block;
position:absolute;
top:0;
left:0;
z-index:2;
height:100%;
width:100%;
background:rgba(255,255,255,.3);
}
}
#modal {
position:absolute;
opacity:0;
top:50%;
left:50%;
height:300px;
width:500px;
margin:-150px 0 0 -250px;
transition:none;
background:inherit;
overflow:hidden;
border-radius:10px;
box-shadow:0 0 50px 5px rgba(0,0,0,.2);
&.show {
opacity:1;
}
#content {
position:absolute;
top:0;
left:0;
z-index:1;
height:100%;
width:100%;
background:rgba(255,255,255,.4);
line-height:300px;
text-align:center;
}
#background {
background:inherit;
position:absolute;
top:-50px;
left:-50px;
height:calc(100% + 100px);
width:calc(100% + 100px);
-webkit-filter:blur(10px);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment