UNPKG

jquery.pep.js

Version:

Kinetic drag for mobile & desktop

119 lines (98 loc) 3.6 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>jquery.pep dropppable advanced</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){ handleCentering(ev, obj); rotate(obj.$el, 0) }, rest: handleCentering }); function handleCentering(ev, obj){ if ( obj.activeDropRegions.length > 0 ) { centerWithin(obj); } } function centerWithin(obj){ var $parent = obj.activeDropRegions[0]; var pTop = $parent.offset().top; var pLeft = $parent.offset().left; var pHeight = $parent.outerHeight(); var pWidth = $parent.outerWidth(); var oTop = obj.$el.offset().top; var oLeft = obj.$el.offset().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; console.log(oTop, oLeft) 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: 90px; height: 90px; background: blue; z-index: 10; } .droppable{ width: 100px; height: 100px; position: absolute; border: 5px solid #ccc; z-index: -1; } .droppable.m { top: 50%; left:50%; margin-left: -50px; margin-top: -50px; } .droppable.tr { right: 30px; bottom: 30px; } .droppable.br { top: 30px; right: 30px;} .droppable.bl { top: 30px; left: 30px;} .droppable.tl { bottom: 30px; left: 30px;} .pep-dpa{ border-color: blue; } </style> </head> <body> <div class="pep"></div> <div class="droppable m"></div> <div class="droppable tr"></div> <div class="droppable br"></div> <div class="droppable bl"></div> <div class="droppable tl"></div> </body> </html>