Voltar ao ranking

taye/interact.js

TypeScriptinteractjs.io

JavaScript drag and drop, resizing and multi-touch gestures with inertia and snapping for modern browsers (and also IE9+)

drag-and-dropinertiasnapvanillajavascriptmulti-touchdroptypescriptmodern-browsersjavascript-dragmobiletouch
Crescimento de estrelas
Estrelas
12.9k
Forks
805
Crescimento semanal
Issues
87
5k10k
jan. de 2023mar. de 2024mai. de 2025jul. de 2026
Artefatosnpmnpm install interact.js
README

interact.js

JavaScript drag and drop, resizing and multi-touch gestures with inertia and snapping for modern browsers (and also IE9+).

Gitter jsDelivr Build Status

Features include:

  • inertia and snapping
  • multi-touch, simultaneous interactions
  • cross browser and device, supporting the desktop and mobile versions of Chrome, Firefox and Opera as well as Internet Explorer 9+
  • interaction with SVG elements
  • being standalone and customizable
  • not modifying the DOM except to change the cursor (but you can disable that)

Installation

  • npm: npm install interactjs
  • jsDelivr CDN: <script src="https://cdn.jsdelivr.net/npm/interactjs/dist/interact.min.js"></script>
  • unpkg CDN: <script src="https://unpkg.com/interactjs/dist/interact.min.js"></script>
  • Rails 5.1+:
    1. yarn add interactjs
    2. //= require interactjs/interact
  • Webjars SBT/Play 2: libraryDependencies ++= Seq("org.webjars.npm" % "interactjs" % version)

Typescript definitions

The project is written in Typescript and the npm package includes the type definitions, but if you need the typings alone, you can install them with:

npm install --save-dev @interactjs/types

Documentation

http://interactjs.io/docs

Example

var pixelSize = 16;

interact('.rainbow-pixel-canvas')
  .origin('self')
  .draggable({
    modifiers: [
      interact.modifiers.snap({
        // snap to the corners of a grid
        targets: [
          interact.snappers.grid({ x: pixelSize, y: pixelSize }),
        ],
      })
    ],
    listeners: {
      // draw colored squares on move
      move: function (event) {
        var context = event.target.getContext('2d'),
            // calculate the angle of the drag direction
            dragAngle = 180 * Math.atan2(event.dx, event.dy) / Math.PI;

        // set color based on drag angle and speed
        context.fillStyle = 'hsl(' + dragAngle + ', 86%, '
                            + (30 + Math.min(event.speed / 1000, 1) * 50) + '%)';

        // draw squares
        context.fillRect(event.pageX - pixelSize / 2, event.pageY - pixelSize / 2,
                         pixelSize, pixelSize);
      }
    }
  })
  // clear the canvas on doubletap
  .on('doubletap', function (event) {
    var context = event.target.getContext('2d');

    context.clearRect(0, 0, context.canvas.width, context.canvas.height);
  });

  function resizeCanvases () {
    [].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 listeners
  interact(document).on('DOMContentLoaded', resizeCanvases);
  interact(window).on('resize', resizeCanvases);

See the above code in action at https://codepen.io/taye/pen/tCKAm

License

interact.js is released under the MIT License.

Repositórios relacionados
atlassian/react-beautiful-dnd

Beautiful and accessible drag and drop for lists with React

JavaScriptnpmOtherreactdrag-and-drop
react-beautiful-dnd.netlify.app
34k2.7k
SortableJS/Sortable

Reorderable drag-and-drop lists for modern browsers and touch devices. No jQuery or framework required.

JavaScriptnpmMIT Licensedragsortable
sortablejs.github.io/Sortable/
31.2k3.7k
GrapesJS/grapesjs

Free and Open source Web Builder Framework. Next generation tool for building templates without coding

TypeScriptnpmOtherweb-builder-frameworktemplate-builder
grapesjs.com
26.1k4.6k
react-grid-layout/react-grid-layout

A draggable and resizable grid layout with responsive breakpoints, for React.

TypeScriptnpmMIT Licensejavascriptreact
react-grid-layout.github.io/react-grid-layout/examples/00-showcase.html
22.4k2.7k
bevacqua/dragula

:ok_hand: Drag and drop so simple it hurts

JavaScriptnpmMIT Licensejavascriptfront-end
bevacqua.github.io/dragula/
22.1k1.9k
react-dnd/react-dnd

Drag and Drop for React

TypeScriptnpmMIT Licensereactdrag-and-drop
react-dnd.github.io/react-dnd
21.6k2k
SortableJS/Vue.Draggable

Vue drag-and-drop component based on Sortable.js

JavaScriptnpmMIT Licensedrag-and-dropvue
sortablejs.github.io/Vue.Draggable/
20.6k2.8k
Shopify/draggable

The JavaScript Drag & Drop library your grandparents warned you about.

JavaScriptnpmMIT Licensejavascriptdrag-and-drop
shopify.github.io/draggable
18.5k1.1k
dropzone/dropzone

Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.

JavaScriptnpmOtherdropzonejavascript
dropzone.dev/js
18.4k3.2k
clauderic/dnd-kit

The modern toolkit for building drag and drop interfaces

TypeScriptnpmMIT Licensereactdraggable
dndkit.com
17.4k911
pqina/filepond

🌊 A flexible and fun JavaScript file upload library

JavaScriptnpmMIT Licensefile-uploaddrag-and-drop
pqina.nl/filepond
16.4k853
konvajs/konva

Konva.js is an HTML5 Canvas JavaScript framework that extends the 2d context by enabling canvas interactivity for desktop and mobile applications.

TypeScriptnpmOtherkonvajavascript
konvajs.org
14.6k1.1k