史上最全addEventListener示例整理

DOM 事件

  • DOMContentLoaded: 在初始的 HTML 文档被完全加载和解析完成后触发(不等待样式表、图片等)。
  • load: 在页面完全加载后触发(包括所有依赖的资源,如样式表和图片)。
  • beforeunloadunload: 在页面即将被卸载前和卸载时触发。
document.addEventListener('DOMContentLoaded', function() {
    console.log('DOM fully loaded and parsed');
});

window.addEventListener('load', function() {
    console.log('Page fully loaded');
});

window.addEventListener('beforeunload', function(event) {
    // 处理即将卸载页面的情况
    event.preventDefault();
    event.returnValue = ''; // 某些浏览器需要返回值
});

window.addEventListener('unload', function() {
    console.log('Page unloaded');
});

表单事件

  • change: 当元素的值改变时触发。
  • input: 在元素的值正在改变时触发。
  • submit: 在表单提交时触发。
document.querySelector('input').addEventListener('change', function(event) {
    console.log('Input value changed to:', event.target.value);
});

document.querySelector('form').addEventListener('submit', function(event) {
    event.preventDefault(); // 阻止表单提交的默认行为
    console.log('Form submitted');
});

Mutation 事件

  • MutationObserver: 用于监视 DOM 树的变化(如节点的增加、删除、属性的变化等)。
const targetNode = document.getElementById('someElement');
const config = { attributes: true, childList: true, subtree: true };

const callback = function(mutationsList, observer) {
    for(let mutation of mutationsList) {
        if (mutation.type === 'childList') {
            console.log('A child node has been added or removed.');
        }
        else if (mutation.type === 'attributes') {
            console.log('The ' + mutation.attributeName + ' attribute was modified.');
        }
    }
};

const observer = new MutationObserver(callback);
observer.observe(targetNode, config);

// 你可以稍后使用以下代码停止观察
// observer.disconnect();

Visibility 事件

  • visibilitychange: 在文档的可见性状态改变时触发(如切换到另一个标签页或最小化窗口)。
document.addEventListener('visibilitychange', function() {
    if (document.visibilityState === 'visible') {
        console.log('Page is visible');
    } else {
        console.log('Page is hidden');
    }
});

Resize 事件

  • resize: 当窗口或框架的大小发生变化时触发。
window.addEventListener('resize', function() {
    console.log('Window resized to', window.innerWidth, 'x', window.innerHeight);
});

Scroll 事件

  • scroll: 当页面或元素的滚动位置发生变化时触发。
window.addEventListener('scroll', function() {
    console.log('Window scrolled to', window.scrollX, window.scrollY);
});

Focus 事件

  • focusblur: 当元素获得或失去焦点时触发。
window.addEventListener('focus', function() {
    console.log('Window has focus');
});

window.addEventListener('blur', function() {
    console.log('Window lost focus');
});

Intersection Observer API

  • IntersectionObserver: 用于异步观察目标元素与其祖先元素或顶级文档视窗的交叉状态。
const observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            console.log('Element is in view');
        } else {
            console.log('Element is out of view');
        }
    });
});

const target = document.querySelector('#targetElement');
observer.observe(target);

Performance Observer API

  • PerformanceObserver: 监听性能相关的事件,例如页面加载时间、资源加载时间等。
const observer = new PerformanceObserver((list) => {
    const entries = list.getEntries();
    for (const entry of entries) {
        console.log(`${entry.entryType}: ${entry.startTime} - ${entry.duration}`);
    }
});

observer.observe({ entryTypes: ['mark', 'measure', 'resource'] });

Media Query 事件

  • matchMedia: 用于监听媒体查询的变化。
const mediaQuery = window.matchMedia('(max-width: 600px)');

mediaQuery.addEventListener('change', function(event) {
    if (event.matches) {
        console.log('Viewport is 600 pixels or less');
    } else {
        console.log('Viewport is more than 600 pixels');
    }
});

Geolocation API

  • geolocation.watchPosition: 用于监听地理位置的变化。
if ('geolocation' in navigator) {
    navigator.geolocation.watchPosition((position) => {
        console.log('Current position:', position.coords.latitude, position.coords.longitude);
    }, (error) => {
        console.error('Error watching position:', error);
    });
}

Online/Offline 事件

  • onlineoffline: 当浏览器网络连接状态发生变化时触发。
window.addEventListener('online', function() {
    console.log('Browser is online');
});

window.addEventListener('offline', function() {
    console.log('Browser is offline');
});

Clipboard 事件

  • copy, cut, 和 paste: 当用户执行剪贴板操作时触发。
document.addEventListener('copy', function(event) {
    console.log('Content copied');
});

document.addEventListener('cut', function(event) {
    console.log('Content cut');
});

document.addEventListener('paste', function(event) {
    console.log('Content pasted');
});

Storage 事件

  • storage: 当 Web Storage(localStoragesessionStorage)的内容发生变化时触发。
window.addEventListener('storage', function(event) {
    console.log('Storage changed:', event.key, event.newValue);
});

Hash 变化事件

  • hashchange: 当 URL 的哈希部分(#)发生变化时触发。
window.addEventListener('hashchange', function() {
    console.log('Hash changed to:', window.location.hash);
});

Popstate 事件

  • popstate: 当活动历史记录条目更改时(例如,通过用户点击浏览器的“后退”按钮)触发。
window.addEventListener('popstate', function(event) {
    console.log('Location changed to:', window.location.href);
});

Page Visibility API

  • visibilitychange: 当文档的可见性状态改变时触发。
document.addEventListener('visibilitychange', function() {
    if (document.visibilityState === 'visible') {
        console.log('Page is visible');
    } else {
        console.log('Page is hidden');
    }
});

Battery API

  • chargingchange, levelchange: 当设备电池充电状态或电量级别变化时触发。
navigator.getBattery().then(function(battery) {
    battery.addEventListener('chargingchange', function() {
        console.log('Battery charging changed:', battery.charging);
    });

    battery.addEventListener('levelchange', function() {
        console.log('Battery level changed:', battery.level);
    });
});

Device Orientation 和 Device Motion

  • deviceorientationdevicemotion: 当设备的方向或运动传感器数据变化时触发。
window.addEventListener('deviceorientation', function(event) {
    console.log('Device orientation:', event.alpha, event.beta, event.gamma);
});

window.addEventListener('devicemotion', function(event) {
    console.log('Device motion:', event.acceleration, event.rotationRate);
});

Pointer 事件

  • pointerdown, pointerup, pointermove, pointerover, pointerout: 用于处理指针(鼠标、触摸、笔)相关的事件。
document.addEventListener('pointerdown', function(event) {
    console.log('Pointer down at:', event.clientX, event.clientY);
});

document.addEventListener('pointermove', function(event) {
    console.log('Pointer moved to:', event.clientX, event.clientY);
});

document.addEventListener('pointerup', function(event) {
    console.log('Pointer up at:', event.clientX, event.clientY);
});

Fullscreen 事件

  • fullscreenchange: 当文档进入或退出全屏模式时触发。
document.addEventListener('fullscreenchange', function() {
    if (document.fullscreenElement) {
        console.log('Entered fullscreen mode');
    } else {
        console.log('Exited fullscreen mode');
    }
});

WebSocket 事件

  • open, message, close, error: 用于监听 WebSocket 连接状态和消息。
const socket = new WebSocket('wss://example.com/socket');

socket.addEventListener('open', function(event) {
    console.log('WebSocket is open now.');
});

socket.addEventListener('message', function(event) {
    console.log('WebSocket message received:', event.data);
});

socket.addEventListener('close', function(event) {
    console.log('WebSocket is closed now.');
});

socket.addEventListener('error', function(event) {
    console.error('WebSocket error observed:', event);
});
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值