JavaScript drag and drop, resizing and multi-touch gestures with inertia and snapping for modern browsers (and also IE8+).
Features include:
- inertia and snapping
- multiple interactions
- cross browser and device, supporting the desktop and mobile versions of Chrome, Firefox and Opera as well as Internet Explorer 8+
- interaction with SVG elements
- being lightweight and standalone (not yet another jQuery plugin)
- not modifying the DOM except to support IE8 and to change the cursor (but you can disable that)
- Bower:
bower install interact - npm:
npm install interact.js - Direct download the latest version: http://interactjs.io/#download
- jsDelivr CDN:
<script src="//cdn.jsdelivr.net/interact.js/VERSION/interact.min.js"></script> - cdnjs CDN:
<script src="//cdnjs.cloudflare.com/ajax/libs/interact.js/VERSION/interact.min.js"></script>(replaceVERSIONwith the SemVer you want to use)
Visit http://interactjs.io/docs for the API documentation.
varpixelSize=16;interact('.rainbow-pixel-canvas').origin('self').draggable({snap: {targets: [interact.createSnapGrid({x: pixelSize,y: pixelSize})]},// allow multiple drags on the same elementmaxPerElement: Infinity})// draw colored squares on move.on('dragmove',function(event){varcontext=event.target.getContext('2d'),// calculate the angle of the drag directiondragAngle=180*Math.atan2(event.dx,event.dy)/Math.PI;// set color based on drag angle and speedcontext.fillStyle='hsl('+dragAngle+', 86%, '+(30+Math.min(event.speed/1000,1)*50)+'%)';// draw squarescontext.fillRect(event.pageX-pixelSize/2,event.pageY-pixelSize/2,pixelSize,pixelSize);})// clear the canvas on doubletap.on('doubletap',function(event){varcontext=event.target.getContext('2d');context.clearRect(0,0,context.canvas.width,context.canvas.height);});functionresizeCanvases(){[].forEach.call(document.querySelectorAll('.rainbow-pixel-canvas'),function(canvas){canvas.width=document.body.clientWidth;canvas.height=window.innerHeight*0.7;});}// interact.js can also add DOM event listenersinteract(document).on('DOMContentLoaded',resizeCanvases);interact(window).on('resize',resizeCanvases);See the above code in action at http://codepen.io/taye/pen/YPyLxE
interact.js is released under the MIT License.