首页 > 其他分享 >用js写一个绑定事件检测窗口大小

用js写一个绑定事件检测窗口大小

时间:2024-12-03 09:35:40浏览次数:6  
标签:handleResize 窗口 函数 debounce 绑定 js window resize

function handleResize() {
  const width = window.innerWidth;
  const height = window.innerHeight;

  // 在这里执行你想要的操作,例如更新布局或显示不同的内容
  console.log(`窗口宽度:${width}px,窗口高度:${height}px`);

  //  一些例子:
  // if (width < 768) {
  //   // 在小屏幕上执行某些操作
  // } else {
  //   // 在大屏幕上执行其他操作
  // }
}


// 初始加载时执行一次
handleResize();

// 绑定 resize 事件
window.addEventListener('resize', handleResize);


// 可选:使用 debounce 或 throttle 优化性能,尤其是在 resize 事件频繁触发的情况下

// Debounce 函数 (lodash 或自己实现)
// function debounce(func, wait) {
//   let timeout;
//   return function() {
//     const context = this;
//     const args = arguments;
//     clearTimeout(timeout);
//     timeout = setTimeout(() => func.apply(context, args), wait);
//   };
// }

// 使用 debounce
// window.addEventListener('resize', debounce(handleResize, 200)); // 200ms 的延迟


// Throttle 函数 (lodash 或自己实现)
// function throttle(func, limit) {
//   let inThrottle;
//   return function() {
//     const args = arguments;
//     const context = this;
//     if (!inThrottle) {
//       func.apply(context, args);
//       inThrottle = true;
//       setTimeout(() => inThrottle = false, limit);
//     }
//   };
// }

// 使用 Throttle
// window.addEventListener('resize', throttle(handleResize, 200)); // 最多每 200ms 执行一次


//  移除事件监听器 (如果需要)
// window.removeEventListener('resize', handleResize); //  或者使用 debounce/throttle 版本的 handleResize

代码解释:

  1. handleResize() 函数: 这个函数包含了在窗口大小改变时需要执行的代码。 它获取当前窗口的宽度 (window.innerWidth) 和高度 (window.innerHeight),并将其打印到控制台。 你可以在这里替换成你自己的逻辑。

  2. 初始调用 handleResize(): 在页面加载完成后立即调用 handleResize() 函数,以确保初始状态下也能正确设置样式或执行其他操作。

  3. window.addEventListener('resize', handleResize): 这行代码将 handleResize 函数绑定到 resize 事件上。每当窗口大小改变时,浏览器都会触发 resize 事件,并执行 handleResize 函数。

  4. Debounce 和 Throttle (可选): resize 事件可能会在短时间内频繁触发,例如用户拖动窗口大小的时候。这可能会导致性能问题。 Debounce 和 Throttle 两种技术可以用来优化性能:

    • Debounce: 在指定的时间间隔内,如果事件再次触发,则会重置计时器。只有当事件停止触发一段时间后,才会执行函数。 适用于用户停止调整大小后才更新布局的场景。
    • Throttle: 在指定的时间间隔内,最多只执行一次函数。 适用于需要实时响应大小变化,但又不想过于频繁执行函数的场景。
  5. window.removeEventListener() (可选): 如果你需要在某个时刻停止监听 resize 事件,可以使用 window.removeEventListener('resize', handleResize) 来移除事件监听器。 确保传入与添加监听器时相同的函数引用 (例如,如果使用了 debounce/throttle,则传入 debounce/throttle 返回的函数)。

如何使用:

  1. 将代码复制到你的 JavaScript 文件中 (例如 script.js)。
  2. 在 HTML 文件中引入 JavaScript 文件: <script src="script.js"></script> 最好放在 </body> 结束标签之前。

现在,每当窗口大小改变时,你都会在控制台中看到输出的宽度和高度。 你可以根据这些值来调整你的页面布局或执行其他操作。

希望这个解释能够帮助你理解如何使用 JavaScript 检测窗口大小变化!

标签:handleResize,窗口,函数,debounce,绑定,js,window,resize
From: https://www.cnblogs.com/ai888/p/18583351

相关文章

  • 说说你对js中的依赖注入的理解,它的实现方式有哪些呢?
    在JavaScript中,依赖注入(DependencyInjection,DI)是一种设计模式,用于降低代码耦合度,提高代码的可测试性、可维护性和可重用性。它的核心思想是将一个模块所需的依赖关系(通常是其他模块或服务)从模块内部的创建,转移到外部提供。这意味着模块不再负责创建自己的依赖,而是被动地接收它......
  • 什么是UUID?它有什么作用?用js写一个生成UUID的方法
    UUID是通用唯一识别码(UniversallyUniqueIdentifier)的缩写,它是一个128位的数字,用于在计算机系统中识别信息。UUID的目的是让分布式系统中的所有元素都能生成不冲突的ID,而无需中央协调。这意味着即使两台不同的机器或两个不同的进程生成UUID,它们也几乎可以肯定不会相同。UU......
  • iframe可以使用父页面中的资源吗(如:css、js等)?
    是的,iframe可以使用父页面中的资源,例如CSS和JavaScript。这取决于iframe的src属性以及父页面和iframe页面之间的关系。以下几种情况:同源策略下的iframe:如果iframe的src指向与父页面同源的URL(协议、域名和端口都相同),那么iframe可以完全访问父页面的资源,包括CSS、JavaScript......
  • 切换标签窗口后js定时器自动停止了,如何在激活标签后又继续呢?
    JavaScript定时器在标签页失去焦点(例如切换到其他标签页或最小化浏览器)时,会被浏览器降低优先级或暂停,以节省资源。这会导致定时器不准确,甚至看起来停止了。要解决这个问题,你需要使用requestAnimationFrame或手动调整时间差。1.使用requestAnimationFrame(推荐)requestAnim......
  • js如何解决数字精度丢失的问题?
    JavaScript使用IEEE754标准的双精度浮点数来表示数字,这会导致在处理某些十进制数时出现精度丢失的问题。例如,0.1+0.2的结果不是0.3,而是0.30000000000000004。以下是一些解决JavaScript数字精度丢失问题的常用方法:1.使用整数进行计算:如果可能,尽量使用整数进行计算,......
  • ThreeJs-05纹理材质高级操作
    1.纹理操作1.1重复、旋转、位移、缩放重复但是要在水平方向上重复,还得允许按照刚才的重复方式如果设置为镜像重复位移旋转1.2翻转与alpha生成颜色正常的图不翻转默认是翻转的预乘透明度预先乘透明度主要是会有一个描边的效果2.纹理属性2.1......
  • y20030034 微信小程序+java+jsp+servlet+mysql+电子设备回收小程序 源码 配置 文档
    电子设备回收小程序1.摘要2.开发背景和意义3.功能结构4.界面展示5.源码获取1.摘要随着移动互联网的发展,微信小程序已经成为人们生活中不可或缺的一部分。微信小程序的优点在于其快速、轻量、易用,用户无需下载即可使用,节省了用户的时间和空间。随着人们对环保意识的......
  • js 原生js几种函数继承方式
    //1.原型链继承functionAnimal(name){this.name=name;this.colors=['black','white'];}Animal.prototype.getName=function(){returnthis.name;};functionDog(name){this.type='dog';}Dog.prototype......
  • vue main.js 捕获错误日志并上传后端接口示例
    import'./assets/main.css';import'./assets/tailwind.css';import'./components/myts';import{createApp}from'vue';import{createPinia}from'pinia';importAppfrom'./App.vue';import......
  • Nuxt.js 应用中的 close 事件钩子
    title:Nuxt.js应用中的close事件钩子date:2024/12/2updated:2024/12/2author:cmdragonexcerpt:close钩子在Nuxt.js的Nitro模块生命周期中起着重要的作用。当Nitro关闭时,这个钩子会被调用。通常用于进行清理操作或释放资源,确保应用在关闭时不会造成资源泄漏......