Retour au classement

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
Croissance des étoiles
Étoiles
12.9k
Forks
805
Croissance hebdomadaire
Issues
87
5k10k
janv. 2023mars 2024mai 2025juil. 2026
Artefactsnpmnpm 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.

Dépôts similaires
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