{ Repost from my personal blog @ https://blog.codezero.xyz/building-interactive-elements-with-html-and-javascript-interact-js-resizing/ }
In a few of the past blog posts, we saw about implementing resizing with HTML and javascript. The functionality was pretty basic with simple resizing. In the last blog post we saw about interact.js.
interact.js is a lightweight, standalone JavaScript module for handling single-pointer and multi-touch drags and gestures with powerful features including inertia and snapping.
Getting started with Interact.js
You have multiple option to include the library in your project.
- You can use bower to install (
bower install interact
) (or) - npm (
npm install interact.js
) (or) - You could directly include the library from a CDN (
https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.6/interact.min.js
).
Implementing resizing
Let’s create a simple box using HTML. We’ll add a class called resizable
to it so that we can reference it to initialize Interact.js
<div class="resizable"> Use right/bottom edge to resize </div>
We need to create an interact
instance. Once the instance is created, we have to call the resizable
method on it to add resize support to the div.
interact('.resizable') .resizable({ edges: { right: true, bottom: true } }) .on('resizemove', function (event) { });
Inside the resizable method, we can pass configuration options. The edges
config key allows us to specify on which all edges, resizing should be allowed. Right now, we have allowed on the right and bottom edges. Similarly we can have resizing support in the top and left edges too.
The resizemove
event is triggered by interact every time the user tries to resize the div. From the event, we can get the box that is being resized, (i.e) the target by accessing event.target
.
The event object also provides us event.rect.width
and event.rect.height
which is the width and height of the div after resizing. We’ll not set this as the width of the div so that, the user is able to see the width change.
var target = event.target; // update the element's style target.style.width = event.rect.width + 'px'; target.style.height = event.rect.height + 'px';
We can also instruct Interact.js to preserve the aspect ratio of the box by adding an option preserveAspectRatio: true
to the configuration object passed to resizable
method during initialization.
interact('.resizable') .resizable({ edges: { right: true, bottom: true } }) .on('resizemove', function (event) { var target = event.target; // update the element's style target.style.width = event.rect.width + 'px'; target.style.height = event.rect.height + 'px'; });
Resizing and drag-drop (with Interact.js) were used to create the Scheduler tool at Open Event. The tool allows event/track organizers to easily arrange the sessions into their respective rooms by drag-drop and also to easily change the timings of the events by resizing the event block. The entire source code of the scheduler can be viewed at app/static/js/admin/event/scheduler.js in the Open Event Organizer server’s GitHub repository.