Resizable element in JavaScript

by shraddhapaghdar

HTML

<p>Click to make me resizable</p>

CSS

p { background: lime; height: 200px; width: 300px; }
p.resizable { background: cyan; position: relative; }
p .resizer { width: 10px; height: 10px; background: blue; position:absolute; right: 0; bottom: 0; cursor: se-resize; }

JavaScript

let p = document.querySelector('p');

p.addEventListener('click', function init() {
    p.removeEventListener('click', init, false);
    p.className = p.className + ' resizable';
    let resizer = document.createElement('div');
    resizer.className = 'resizer';
    p.appendChild(resizer);
    resizer.addEventListener('mousedown', initDragging, false);
}, false);

let startX, startY, startWidth, startHeight;

function initDragging(e) {
   startX = e.clientX;
   startY = e.clientY;
   startWidth = parseInt(document.defaultView.getComputedStyle(p).width, 10);
   startHeight = parseInt(document.defaultView.getComputedStyle(p).height, 10);
   document.documentElement.addEventListener('mousemove', doDragging, false);
   document.documentElement.addEventListener('mouseup', stopDragging, false);
}

function doDragging(e) {
   p.style.width = (startWidth + e.clientX - startX) + 'px';
   p.style.height = (startHeight + e.clientY - startY) + 'px';
}

function stopDragging(e) {
    document.documentElement.removeEventListener('mousemove', doDragging, false);    
    document.documentElement.removeEventListener('mouseup', stopDragging, false);
}