Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

JavaScript Event Binding Methods and Implementation

Tech 1

Direct Assignment Binding (DOM Level 0)

const element = document.querySelector('.target');

// Assign event handler directly
element.onclick = function() {
    console.log('First handler');
};

// Overwrites previous handler
element.onclick = function() {
    console.log('Second handler');
};

// Remove event handler
element.onclick = null;

Listener-Based Binding (DOM Level 2)

const targetElement = document.querySelector('.target');

// Add multiple event listeners
function firstHandler() {
    console.log('Listener 1');
}

targetElement.addEventListener('click', firstHandler);

targetElement.addEventListener('click', function() {
    console.log('Listener 2');
});

// Remove specific listener
targetElement.removeEventListener('click', firstHandler);

Cross-Browser Event Handling

// Legacy IE support
if (targetElement.attachEvent) {
    targetElement.attachEvent('onclick', firstHandler);
    targetElement.detachEvent('onclick', firstHandler);
}

// Unified event management functions
function registerEvent(element, eventType, callback) {
    if (element.addEventListener) {
        element.addEventListener(eventType, callback);
    } else if (element.attachEvent) {
        element.attachEvent('on' + eventType, callback);
    } else {
        element['on' + eventType] = callback;
    }
}

function unregisterEvent(element, eventType, callback) {
    if (element.removeEventListener) {
        element.removeEventListener(eventType, callback);
    } else if (element.detachEvent) {
        element.detachEvent('on' + eventType, callback);
    } else {
        element['on' + eventType] = null;
    }
}

Practical Usage Example

const boxElement = document.querySelector('.box');

function handleClick() {
    console.log('Box clicked');
}

function handleDoubleClick() {
    console.log('Box double clicked');
}

// Register events
registerEvent(boxElement, 'click', handleClick);
registerEvent(boxElement, 'dblclick', handleDoubleClick);

// Unregister specific event
unregisterEvent(boxElement, 'click', handleClick);

Drag and Drop Implementation

const draggableElement = document.querySelector('.draggable');
const viewportWidth = document.documentElement.clientWidth;
const viewportHeight = document.documentElement.clientHeight;
const elementWidth = draggableElement.offsetWidth;
const elementHeight = draggableElement.offsetHeight;

// Initialize drag operation
function startDrag(event) {
    const startX = event.pageX - draggableElement.offsetLeft;
    const startY = event.pageY - draggableElement.offsetTop;
    
    // Handle mouse movement during drag
    function performDrag(moveEvent) {
        let newX = moveEvent.pageX - startX;
        let newY = moveEvent.pageY - startY;
        
        // Constrain movement within boundaries
        newX = Math.max(0, Math.min(newX, viewportWidth - elementWidth));
        newY = Math.max(0, Math.min(newY, viewportHeight - elementHeight));
        
        // Update element position
        draggableElement.style.left = newX + 'px';
        draggableElement.style.top = newY + 'px';
    }
    
    // Terminate drag operation
    function endDrag() {
        document.removeEventListener('mousemove', performDrag);
        document.removeEventListener('mouseup', endDrag);
    }
    
    // Attach document-level listeners
    document.addEventListener('mousemove', performDrag);
    document.addEventListener('mouseup', endDrag);
}

// Bind drag initiation to mousedown event
draggableElement.addEventListener('mousedown', startDrag);

Related Articles

Understanding Strong and Weak References in Java

Strong References Strong reference are the most prevalent type of object referencing in Java. When an object has a strong reference pointing to it, the garbage collector will not reclaim its memory. F...

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

SBUS Signal Analysis and Communication Implementation Using STM32 with Fus Remote Controller

Overview In a recent project, I utilized the SBUS protocol with the Fus remote controller to control a vehicle's basic operations, including movement, lights, and mode switching. This article is aimed...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.