UNPKG

jquery.pep.js

Version:

Kinetic drag for mobile & desktop

113 lines (93 loc) 3.43 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>jquery.pep droppable w/ consuming parent</title> <!-- Load local jQuery. --> <script src="../libs/jquery/jquery.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script> <!-- Load local lib and tests. --> <script src="../src/jquery.pep.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('.pep').pep({ droppable: '.droppable', overlapFunction: false, useCSSTranslation: false, start: function(ev, obj){ obj.noCenter = false; }, drag: function(ev, obj){ var vel = obj.velocity(); var rot = (vel.x)/5; rotate(obj.$el, rot); }, stop: function(ev, obj){ rotate(obj.$el, 0); }, rest: handleCentering }); function handleCentering(ev, obj){ console.log(obj.activeDropRegions.length); if ( obj.activeDropRegions.length > 0 ) { centerWithin(obj); } } function centerWithin(obj){ var $parent = obj.activeDropRegions[0]; var pTop = $parent.position().top; var pLeft = $parent.position().left; var pHeight = $parent.outerHeight(); var pWidth = $parent.outerWidth(); var oTop = obj.$el.position().top; var oLeft = obj.$el.position().left; var oHeight = obj.$el.outerHeight(); var oWidth = obj.$el.outerWidth(); var cTop = pTop + (pHeight/2); var cLeft = pLeft + (pWidth/2); if ( !obj.noCenter ) { if ( !obj.shouldUseCSSTranslation() ) { var moveTop = cTop - (oHeight/2); var moveLeft = cLeft - (oWidth/2); obj.$el.animate({ top: moveTop, left: moveLeft }, 50); } else{ var moveTop = (cTop - oTop) - oHeight/2; var moveLeft = (cLeft - oLeft) - oWidth/2; obj.moveToUsingTransforms( moveTop, moveLeft ); } obj.noCenter = true; return; } obj.noCenter = false; } function rotate($obj, deg){ $obj.css({ "-webkit-transform": "rotate("+ deg +"deg)", "-moz-transform": "rotate("+ deg +"deg)", "-ms-transform": "rotate("+ deg +"deg)", "-o-transform": "rotate("+ deg +"deg)", "transform": "rotate("+ deg +"deg)" }); } }); </script> <style type="text/css"> .pep{ width: 80px; height: 80px; background: blue; z-index: 10; } .droppable{ width: 100px; height: 100px; position: absolute; border: 5px solid #ccc; } .droppable.tr { right: 100px; bottom: 100px; } .droppable.br { top: 100px; right: 100px;} .droppable.bl { top: 100px; left: 100px;} .droppable.tl { bottom: 100px; left: 100px;} .pep-dpa { border-color: blue; background: yellow } </style> </head> <body> <div class="pep"></div> <div class="droppable tr"></div> <div class="droppable br"></div> <div class="droppable bl"></div> <div class="droppable tl"></div> </body> </html>