Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
JavaScript实现响应式布局:实时获取与监听屏幕尺寸变化_创想鸟

JavaScript实现响应式布局:实时获取与监听屏幕尺寸变化

JavaScript实现响应式布局:实时获取与监听屏幕尺寸变化

本文详细介绍了如何使用javascript实时获取并监听浏览器窗口的宽度和高度,这对于实现响应式网页设计至关重要。我们将探讨两种主要方法:原生javascript事件监听器和react hooks,并提供相应的代码示例,旨在帮助开发者构建能够根据屏幕尺寸动态调整布局和内容的网站。

引言

在现代Web开发中,响应式设计是不可或缺的一部分。为了使网站在不同设备和屏幕尺寸上都能提供良好的用户体验,开发者经常需要根据屏幕的实时宽度和高度来动态调整页面布局、元素大小或显示内容。JavaScript提供了强大的能力来实现这一目标,通过监听浏览器窗口尺寸的变化,我们可以实时获取最新的尺寸数据并据此进行相应的操作。

核心API:window.innerWidth 和 window.innerHeight

获取浏览器视口(viewport)的当前宽度和高度是实现响应式功能的基础。JavaScript提供了 window.innerWidth 和 window.innerHeight 属性,它们分别返回浏览器窗口内容区域的宽度和高度(包括滚动条,如果存在)。

window.innerWidth: 返回浏览器窗口的内部宽度(以像素为单位)。window.innerHeight: 返回浏览器窗口的内部高度(以像素为单位)。

这两个属性在页面加载时会提供初始值,但当用户调整浏览器窗口大小时,它们的值不会自动更新,需要通过事件监听来实时获取。

使用原生JavaScript监听屏幕尺寸变化

为了持续获取屏幕尺寸的变化,我们需要监听 window 对象的 resize 事件。当浏览器窗口大小发生变化时,该事件会被触发。

立即学习“Java免费学习笔记(深入)”;

实现步骤

定义处理函数: 创建一个函数来处理 resize 事件,在该函数内部获取 window.innerWidth 和 window.innerHeight 的最新值。添加事件监听器: 使用 window.addEventListener(‘resize’, yourHandlerFunction) 将处理函数绑定到 resize 事件。首次调用: 由于 resize 事件只在窗口大小变化时触发,为了在页面加载时就获取到初始尺寸,需要在添加监听器后立即调用一次处理函数。清理(可选但推荐): 如果在特定场景下不再需要监听,应使用 window.removeEventListener(‘resize’, yourHandlerFunction) 移除事件监听器,以避免内存泄漏。

示例代码

以下是一个使用原生JavaScript实时显示屏幕尺寸的例子:

function handleResize() {  const newWidth = window.innerWidth;  const newHeight = window.innerHeight;  // 假设页面中有一个id为'app'的元素用于显示尺寸  const appElement = document.getElementById("app");  if (appElement) {    appElement.innerHTML = `当前宽度: ${newWidth}px, 当前高度: ${newHeight}px`;    // 在这里可以根据newWidth和newHeight进行其他DOM操作或样式调整    // 例如:    // if (newWidth < 768) {    //   document.body.classList.add('mobile-layout');    // } else {    //   document.body.classList.remove('mobile-layout');    // }  }}// 添加事件监听器window.addEventListener("resize", handleResize);// 页面加载时立即调用一次,获取初始尺寸handleResize();// 在需要停止监听时,可以调用:// window.removeEventListener("resize", handleResize);

注意事项:

性能优化: resize 事件在窗口大小调整过程中可能会非常频繁地触发,这可能导致大量的计算和DOM操作,影响页面性能。为了避免这种情况,强烈建议使用去抖 (debounce) 或节流 (throttle) 技术来限制处理函数的执行频率。去抖 (Debounce): 在事件停止触发一段时间后才执行处理函数。节流 (Throttle): 在一段时间内只执行一次处理函数。CSS Media Queries: 对于纯粹的样式调整,CSS媒体查询(Media Queries)通常是更简洁、性能更好的选择。JavaScript方法更适用于需要根据尺寸进行复杂逻辑判断、动态加载组件或调整非CSS属性的场景。

在React应用中使用自定义Hook获取屏幕尺寸

在React等现代前端框架中,我们可以将获取和监听屏幕尺寸的逻辑封装成一个可复用的自定义Hook,从而在组件中更方便地使用。

示例代码:useWindowSize Hook

import { useEffect, useState } from 'react';/** * 一个自定义React Hook,用于实时获取并返回窗口的宽度和高度。 * * @returns {{width: number | undefined, height: number | undefined}} 包含当前窗口宽度和高度的对象。 */export function useWindowSize() {  // 使用useState来存储窗口尺寸,初始值设为undefined  const [windowSize, setWindowSize] = useState({    width: undefined,    height: undefined  });  useEffect(() => {    // 定义处理窗口resize事件的函数    function handleResize() {      // 更新state中的窗口尺寸      setWindowSize({        width: window.innerWidth,        height: window.innerHeight      });    }    // 添加resize事件监听器    window.addEventListener('resize', handleResize);    // 首次渲染时立即调用一次,获取初始尺寸    handleResize();    // 返回一个清理函数,在组件卸载时移除事件监听器    return () => window.removeEventListener('resize', handleResize);  }, []); // 空依赖数组表示此Effect只在组件挂载和卸载时运行  return windowSize;}

如何在React组件中使用

在你的React组件中,只需调用 useWindowSize Hook 即可获取到当前的窗口尺寸:

import React from 'react';import { useWindowSize } from './useWindowSize'; // 假设useWindowSize Hook在同级目录下function MyResponsiveComponent() {  const { width, height } = useWindowSize();  if (width === undefined || height === undefined) {    return 
正在加载尺寸信息...
; } return (

我的响应式组件

当前窗口宽度: {width}px

当前窗口高度: {height}px

{width < 768 ? (

这是一个移动设备布局。

) : (

这是一个桌面设备布局。

)} {/* 根据width和height进行其他逻辑或渲染 */}
);}export default MyResponsiveComponent;

React Hook 的优势:

封装性: 将尺寸监听逻辑封装在一个独立的Hook中,提高了代码的可读性和可维护性。可复用性: 任何组件都可以轻松地导入并使用 useWindowSize Hook,避免了重复代码。生命周期管理: useEffect 负责处理事件监听器的添加和移除,确保在组件挂载时监听,在组件卸载时清理,有效防止内存泄漏。响应式更新: useState 确保当窗口尺寸变化时,使用该Hook的组件会自动重新渲染,以反映最新的尺寸。

总结

无论是通过原生JavaScript的 window.addEventListener(‘resize’, …) 还是通过React的自定义Hook,实时获取和监听屏幕尺寸变化都是实现动态响应式网页的关键技术。在选择具体实现方式时,应根据项目的技术栈和需求进行权衡。对于简单的应用或非框架项目,原生JavaScript方法直接有效;而在React等组件化框架中,封装成自定义Hook则能更好地提升代码的组织性和复用性。同时,务必考虑性能优化,如去抖或节流,以确保用户体验的流畅性。

以上就是JavaScript实现响应式布局:实时获取与监听屏幕尺寸变化的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1588081.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ASP.NET MVC中全屏背景图与边距处理指南
上一篇 2025年12月23日 03:58:52
HTML5在线如何构建任务列表 HTML5在线管理应用的开发教程
下一篇 2025年12月23日 03:59:04

相关推荐

  • windows怎么修改环境变量_环境变量配置教程

    windows怎么修改环境变量_环境变量配置教程windows怎么修改环境变量_环境变量配置教程windows怎么修改环境变量_环境变量配置教程windows怎么修改环境变量_环境变量配置教程

    首先通过系统属性界面修改环境变量,右键“此电脑”→“属性”→“高级系统设置”→“环境变量”,在Path中添加路径并保存;其次可用命令提示符输入set命令临时设置变量;还可通过PowerShell执行[Environment]::SetEnvironmentVariable永久配置;最后高级用户可通过…

    2026年9月24日 • 用户投稿
    100
  • Java中实现跨类和函数共享变量的指南

    Java中实现跨类和函数共享变量的指南Java中实现跨类和函数共享变量的指南Java中实现跨类和函数共享变量的指南Java中实现跨类和函数共享变量的指南

    本教程将详细介绍在Java中如何创建可在所有类和函数中访问的共享变量。通过利用public static关键字,我们可以定义类级别的变量,实现全局共享状态。文章将提供声明、访问示例,并讨论使用此类变量时的最佳实践和注意事项,确保代码的可维护性和健壮性。 理解共享变量的需求 在java应用程序开发中,…

    2026年9月24日 • 用户投稿
    100
  • Ubuntu挂载网络共享

    在ubuntu中挂载网络共享有多种方法,以下是其中两种常用的方法: 方法一:使用mount命令 安装必要的软件包:如果你还没有安装cifs-utils(用于CIFS/SMB协议),可以使用以下命令安装: sudo apt updatesudo apt install cifs-utils 创建挂载点…

    2026年9月24日
    000
  • x浏览器怎么查看网页源代码_x浏览器查看页面HTML源代码方法

    x浏览器怎么查看网页源代码_x浏览器查看页面HTML源代码方法x浏览器怎么查看网页源代码_x浏览器查看页面HTML源代码方法x浏览器怎么查看网页源代码_x浏览器查看页面HTML源代码方法x浏览器怎么查看网页源代码_x浏览器查看页面HTML源代码方法

    1、打开x浏览器加载网页后,点击右上角三点菜单选择“查看源代码”即可显示HTML源码;2、长按页面链接可在快捷菜单中查找“查看源代码”选项快速访问;3、启用开发者工具模式后可通过“检查元素”功能进行更深入的页面结构分析。 如果您在浏览网页时需要查看页面的HTML源代码,以便分析结构或调试内容,可以通…

    2026年9月24日 • 用户投稿
    000
  • windows10怎么设置任务栏图标不合并_windows10任务栏图标不合并教程

    windows10怎么设置任务栏图标不合并_windows10任务栏图标不合并教程windows10怎么设置任务栏图标不合并_windows10任务栏图标不合并教程windows10怎么设置任务栏图标不合并_windows10任务栏图标不合并教程windows10怎么设置任务栏图标不合并_windows10任务栏图标不合并教程

    选择“从不合并”可避免Windows 10任务栏图标合并,右键任务栏进入设置或通过控制面板调整“合并任务栏按钮”选项即可实现窗口独立显示。 如果您在使用Windows 10时发现多个打开的窗口被合并显示在同一个任务栏图标上,导致难以区分和快速切换,可以通过调整任务栏设置来避免图标合并。以下是具体的解…

    2026年9月24日 • 用户投稿
    000
  • Java中实现州府问答系统:2D数组管理、排序与用户输入验证

    Java中实现州府问答系统:2D数组管理、排序与用户输入验证Java中实现州府问答系统:2D数组管理、排序与用户输入验证Java中实现州府问答系统:2D数组管理、排序与用户输入验证Java中实现州府问答系统:2D数组管理、排序与用户输入验证

    本教程详细介绍了如何使用Java构建一个州府问答系统。内容涵盖了使用二维数组存储州名及其首都数据、实现冒泡排序对数据按首都名称进行排序、以及如何通过用户输入验证机制,处理大小写不敏感的答案,并最终统计正确率。文章提供了完整的代码示例和关键注意事项,帮助读者理解并实现类似的数据结构与算法应用。 1. …

    2026年9月24日 • 用户投稿
    100
  • sublime如何配置使其支持EditorConfig _sublime EditorConfig支持配置

    sublime如何配置使其支持EditorConfig _sublime EditorConfig支持配置sublime如何配置使其支持EditorConfig _sublime EditorConfig支持配置sublime如何配置使其支持EditorConfig _sublime EditorConfig支持配置sublime如何配置使其支持EditorConfig _sublime EditorConfig支持配置

    首先安装Package Control,再通过命令面板安装EditorConfig插件,确保项目根目录有.editorconfig文件,重启后即可自动应用格式规则。 Sublime Text 本身不内置支持 EditorConfig,但可以通过安装插件来实现对 .editorconfig 文件的识别…

    2026年9月24日 • 用户投稿
    100
  • UC浏览器下载的电子书在哪个目录_UC浏览器电子书文件存储位置查找

    UC浏览器下载的电子书在哪个目录_UC浏览器电子书文件存储位置查找UC浏览器下载的电子书在哪个目录_UC浏览器电子书文件存储位置查找UC浏览器下载的电子书在哪个目录_UC浏览器电子书文件存储位置查找UC浏览器下载的电子书在哪个目录_UC浏览器电子书文件存储位置查找

    首先通过UC浏览器下载管理查找电子书位置,其次使用文件管理器搜索内部存储的UCDownloads或ucbrowser/Download文件夹,检查SD卡中的UCBrowser目录,并通过浏览器设置确认默认下载路径以准确定位文件。 如果您在使用UC浏览器下载电子书后无法找到文件的存储位置,可能是由于系…

    2026年9月24日 • 用户投稿
    100
  • 使用 Rest Assured 创建泛型 JSONPath 值提取函数

    使用 Rest Assured 创建泛型 JSONPath 值提取函数使用 Rest Assured 创建泛型 JSONPath 值提取函数使用 Rest Assured 创建泛型 JSONPath 值提取函数使用 Rest Assured 创建泛型 JSONPath 值提取函数

    本文探讨如何在 Rest Assured 中设计一个泛型工具函数,以实现类型安全的 JSONPath 值提取。针对直接使用 T.class 导致的编译错误,文章提供了通过将 Class 作为参数传入的解决方案,有效规避了 Java 泛型擦除问题,从而实现灵活、可复用的 JSON 数据解析。 泛型 J…

    2026年9月24日 • 用户投稿
    000
  • x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法

    x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法x浏览器保存的密码在哪里查看_x浏览器已保存账号密码查看方法

    首先通过X浏览器设置进入密码管理,再选择具体网站查看账号密码。操作路径为:打开X浏览器→点击菜单→进入设置→选择安全及隐私→点击站点密码管理→找到目标网站→点击编辑→查看明文账号密码,全过程需通过设备验证。 如果您在使用X浏览器时启用了密码保存功能,但需要查看已存储的账号信息,则可以通过浏览器内置的…

    2026年9月24日 • 用户投稿
    000
  • windows8怎么设置网络为专用网络或公用网络_windows8网络类型切换步骤

    windows8怎么设置网络为专用网络或公用网络_windows8网络类型切换步骤windows8怎么设置网络为专用网络或公用网络_windows8网络类型切换步骤windows8怎么设置网络为专用网络或公用网络_windows8网络类型切换步骤windows8怎么设置网络为专用网络或公用网络_windows8网络类型切换步骤

    首先通过“电脑设置”将网络类型从公用改为专用,具体操作为Win+I进入设置后点击“更改电脑设置”,选择“网络”并进入当前网络,开启“查找设备和内容”;其次可通过任务栏网络图标右键菜单启用共享以切换为专用网络;若无效则使用本地安全策略编辑器,运行secpol.msc后进入“网络列表管理器策略”,双击“…

    2026年9月24日 • 用户投稿
    100
  • Java对象数组归并排序逻辑错误解析与修正

    Java对象数组归并排序逻辑错误解析与修正Java对象数组归并排序逻辑错误解析与修正Java对象数组归并排序逻辑错误解析与修正Java对象数组归并排序逻辑错误解析与修正

    本文旨在深入分析Java中对对象数组执行归并排序时常见的逻辑错误,特别是子数组创建时的System.arraycopy误用以及merge方法中循环结构的不当,导致排序结果异常。通过详细的错误剖析,提供了一套修正后的归并排序实现方案,包括辅助数组复制方法和优化的合并逻辑,确保对象数组能够正确、高效地进…

    2026年9月24日 • 用户投稿
    100
  • 抖音双11好物节有哪些优惠活动?双11抖音有什么活动

    抖音双11好物节有哪些优惠活动?双11抖音有什么活动抖音双11好物节有哪些优惠活动?双11抖音有什么活动抖音双11好物节有哪些优惠活动?双11抖音有什么活动抖音双11好物节有哪些优惠活动?双11抖音有什么活动

    一年一度的双11购物狂欢节即将来临,抖音平台也紧跟潮流,推出了抖音双11好物节活动。这次活动可谓是优惠满满,好物多多,让广大消费者在购物的同时,也能享受购物的乐趣。下面,就让我为大家详细介绍一下2025年抖音双11好物节的优惠活动吧! 一、抖音双11好物节活动时间 活动周期:2025年9月16日(中…

    2026年9月24日 • 用户投稿
    000
  • 如何验证厂商宣传的散热技术是否切实有效?

    如何验证厂商宣传的散热技术是否切实有效?如何验证厂商宣传的散热技术是否切实有效?如何验证厂商宣传的散热技术是否切实有效?如何验证厂商宣传的散热技术是否切实有效?

    要验证散热技术是否有效,需结合产品规格、第三方评测、用户反馈及自行测试。首先查看热管数量与材质、均热板设计、风扇风量与静压等真实参数,警惕模糊宣传;其次参考专业媒体在标准环境下的烤机测试数据,如AIDA64或FurMark负载下的温度与频率表现;再通过电商平台或论坛收集长期使用反馈,关注共性问题如噪…

    2026年9月24日 • 用户投稿
    000
  • VS Code任务绑定:快捷键触发与文件事件关联

    配置VS Code任务可提升效率,先设置快捷键绑定任务,如通过keybindings.json用Ctrl+Shift+B运行构建;再配置tasks.json使任务响应文件保存等事件,实现自动编译或校验,结合isBackground、group和dependsOn优化执行逻辑。 在 VS Code 中…

    2026年9月24日
    600
  • 键盘多媒体按键的实用性在实际使用中如何?

    键盘多媒体按键的实用性在实际使用中如何?键盘多媒体按键的实用性在实际使用中如何?键盘多媒体按键的实用性在实际使用中如何?键盘多媒体按键的实用性在实际使用中如何?

    键盘多媒体按键在简化日常操作方面有一定价值,但其真正的实用性高度依赖于用户的使用习惯和工作环境。对于经常调整音量、播放音乐或观看视频的用户,这些按键能显著提升操作便捷性,尤其在全屏状态下无需切换窗口即可控制媒体功能。配合自定义软件,可将按键设置为启动应用、执行系统命令或模拟快捷键,进一步提升效率;例…

    2026年9月24日 • 用户投稿
    500
  • 夸克网盘怎么分享文件_文件分享链接创建与管理

    夸克网盘怎么分享文件_文件分享链接创建与管理夸克网盘怎么分享文件_文件分享链接创建与管理夸克网盘怎么分享文件_文件分享链接创建与管理夸克网盘怎么分享文件_文件分享链接创建与管理

    夸克网盘支持通过生成链接或二维码分享文件。首先打开夸克App进入网盘页面,长按选中文件后点击“分享”,可选择公开或私密模式并设置有效期(1天、7天或永久),生成链接后系统自动复制到剪贴板。已生成的链接可在“我的分享”页面管理,支持修改有效期、更改密码或停止分享。此外,还可通过“二维码分享”功能生成二…

    2026年9月24日 • 用户投稿
    100
  • 为什么我的固态硬盘读写速度远低于标称值?

    为什么我的固态硬盘读写速度远低于标称值?为什么我的固态硬盘读写速度远低于标称值?为什么我的固态硬盘读写速度远低于标称值?为什么我的固态硬盘读写速度远低于标称值?

    固态硬盘实际速度低于标称值主要因接口类型、SLC缓存机制、容量占用、系统配置及散热等因素影响。首先,SATA SSD受限于600MB/s带宽,而NVMe SSD通过PCIe通道可实现数千MB/s速度,需确认接口与协议匹配;其次,TLC/QLC颗粒的SSD依赖SLC缓存提升瞬时性能,缓存写满后速度骤降…

    2026年9月24日 • 用户投稿
    200
  • 高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略

    高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略高效集成SOAP服务:Spring Boot中WSDL转Java的实践与策略

    本教程旨在指导开发者如何在Spring Boot项目中将WSDL(Web Services Description Language)文件转换为Java类,并成功消费SOAP(Simple Object Access Protocol)Web服务。文章将探讨常见的转换挑战,如wsimport兼容性问…

    2026年9月24日 • 用户投稿
    100
  • windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法

    windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法windows10提示“we couldn’t complete the updates undoing changes”_windows10更新失败修复方法

    遇到Windows 10更新失败时,可依次使用Windows更新疑难解答、重置更新组件、运行SFC和DISM修复系统文件,或使用Media Creation Tool进行原地升级解决。 如果您在尝试更新 Windows 10 系统时遇到“我们无法完成更新,正在撤消更改”的提示,这通常意味着更新过程中…

    2026年9月24日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信