Comprehensive Guide to InteractJS for Optimized Web Development

InteractJS: A Powerful Library for Web Developers

InteractJS is a versatile JavaScript library that allows developers to interact with HTML elements in a variety of ways such as drag-and-drop, resizing, multi-touch, and more.

Drag and Drop

Enable drag-and-drop functionality with ease using InteractJS:


  interact('.draggable')
    .draggable({
      inertia: true,
      onmove: dragMoveListener,
    });

  function dragMoveListener(event) {
    var target = event.target;
    var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
    var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
    
    target.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
    target.setAttribute('data-x', x);
    target.setAttribute('data-y', y);
  }

Resizing Elements

Make any element resizable:


  interact('.resizable')
    .resizable({
      edges: { left: true, right: true, bottom: true, top: true },
    })
    .on('resizemove', function (event) {
      var target = event.target;
      var x = (parseFloat(target.getAttribute('data-x')) || 0);
      var y = (parseFloat(target.getAttribute('data-y')) || 0);
    
      target.style.width = event.rect.width + 'px';
      target.style.height = event.rect.height + 'px';
    
      target.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
    });

Rotating Elements

Enable element rotation easily:


  interact('.rotatable')
    .gesturable({
      onmove: function (event) {
        var target = event.target;
        var angle = (parseFloat(target.getAttribute('data-angle')) || 0) + event.da;
    
        target.style.transform = 'rotate(' + angle + 'deg)';
        target.setAttribute('data-angle', angle);
      }
    });

Multi-Touch Gestures

Implement multi-touch gestures like pinch-to-zoom:


  interact('.pinchable')
    .gesturable({
      onmove: function (event) {
        var target = event.target;
        var scale = (parseFloat(target.getAttribute('data-scale')) || 1) * (1 + event.ds);
    
        target.style.transform = 'scale(' + scale + ')';
        target.setAttribute('data-scale', scale);
      }
    });

Snap to Grid

Snap draggable elements to a grid for more control:


  interact('.draggable')
    .draggable({
      modifiers: [
        interact.modifiers.snap({
          targets: [
            interact.snappers.grid({ x: 30, y: 30 })
          ],
          range: Infinity,
          relativePoints: [{ x: 0.5, y: 0.5 }]
        })
      ],
      onmove: dragMoveListener
    });

App Example: Task Management Board

Here is an example of an app using the introduced APIs to create a task management board with drag-and-drop functionality:


  <!DOCTYPE html>
  <html>
  <head>
    <title>Task Management Board</title>
    <script src="https://cdn.jsdelivr.net/npm/@interactjs/interactjs/dist/interact.min.js"></script>
    <style>
      .task {width: 100px; height: 100px; border: 1px solid #000;}
      .column {width: 120px; float: left;}
    </style>
  </head>
  <body>
    <div class="column" id="todo">To Do</div>
    <div class="column" id="doing">Doing</div>
    <div class="column" id="done">Done</div>

    <div class="task draggable" data-x="0" data-y="0">Task 1</div>

    <script>
      interact('.draggable').draggable({
        inertia: true,
        onmove: function (event) {
          var target = event.target;
          var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
          var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
          target.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
          target.setAttribute('data-x', x);
          target.setAttribute('data-y', y);
        }
      });
    </script>
  </body>
  </html>

Hash: 3010b072eba3670bc98b2d3864cd2b7151c69a112a1263bb2321dda2576f7163

Leave a Reply

Your email address will not be published. Required fields are marked *