当前位置:首页 > JavaScript

js 实现监听

2026-02-01 01:16:16JavaScript

事件监听基础方法

使用 addEventListener 绑定事件到DOM元素,支持多个监听器:

const button = document.getElementById('myButton');
button.addEventListener('click', function(event) {
  console.log('Button clicked', event.target);
});

自定义事件派发与监听

创建并触发自定义事件,适用于组件通信:

// 创建事件
const event = new CustomEvent('customEvent', { detail: { data: 'example' } });

// 监听事件
document.addEventListener('customEvent', (e) => {
  console.log('Custom event triggered:', e.detail);
});

// 触发事件
document.dispatchEvent(event);

监听对象属性变化

通过 ProxyObject.defineProperty 实现数据响应式:

// Proxy 方式
const target = { value: 1 };
const handler = {
  set(obj, prop, newVal) {
    console.log(`Property ${prop} changed to ${newVal}`);
    obj[prop] = newVal;
    return true;
  }
};
const proxy = new Proxy(target, handler);
proxy.value = 2; // 触发日志输出

// Object.defineProperty 方式
const obj = {};
let internalValue = '';
Object.defineProperty(obj, 'value', {
  get() { return internalValue; },
  set(newVal) {
    console.log('Value changed:', newVal);
    internalValue = newVal;
  }
});
obj.value = 'new'; // 触发日志输出

监听URL哈希变化

捕获浏览器地址栏哈希变化:

window.addEventListener('hashchange', () => {
  console.log('Hash changed:', window.location.hash);
});

监听滚动事件优化

使用节流(throttle)减少滚动事件触发频率:

function throttle(func, delay) {
  let lastCall = 0;
  return function(...args) {
    const now = new Date().getTime();
    if (now - lastCall >= delay) {
      func.apply(this, args);
      lastCall = now;
    }
  };
}

window.addEventListener('scroll', throttle(() => {
  console.log('Scrolling:', window.scrollY);
}, 200));

监听表单输入变化

实时监听输入框内容变化(使用 input 事件):

const input = document.getElementById('search');
input.addEventListener('input', (e) => {
  console.log('Input value:', e.target.value);
});

监听子元素事件(事件委托)

通过父元素代理监听动态子元素事件:

js 实现监听

document.getElementById('parent').addEventListener('click', (e) => {
  if (e.target.classList.contains('child')) {
    console.log('Child element clicked:', e.target);
  }
});

标签: js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…