
本文详细介绍了如何使用 j*ascript 动态获取浏览器窗口的实时宽度和高度,并响应窗口大小变化。内容涵盖了原生 j*ascript 的事件监听机制,以及在 react 应用中通过自定义 hook 实现的封装方法,旨在帮助开发者构建高效、响应式的用户界面。
在现代 Web 开发中,构建响应式布局是不可或缺的一部分。虽然 CSS 媒体查询能处理大多数响应式需求,但在某些场景下,我们需要通过 J*aScript 动态获取并响应浏览器窗口的尺寸变化,例如根据窗口大小调整组件行为、执行复杂的布局计算或触发特定的动画。
J*aScript 提供了 window.innerWidth 和 window.innerHeight 属性,用于获取浏览器视口(viewport)的当前宽度和高度(不包括浏览器工具栏和滚动条)。要实现“持续返回”尺寸,关键在于监听 window 对象的 resize 事件。
这两个属性是获取当前视口尺寸最直接的方式。
这些值会在窗口大小发生变化时实时更新。
为了在窗口尺寸改变时执行特定操作,我们需要为 window 对象添加一个 resize 事件监听器。
/**
* 处理窗口尺寸变化的函数
*/
function handleResize() {
const newWidth = window.innerWidth;
const newHeight = window.innerHeight;
// 在这里执行你需要根据新尺寸进行的操作
// 例如,更新 DOM 元素的内容或调整布局
document.getElementById("app").innerHTML = `
当前窗口宽度: ${newWidth}px,
当前窗口高度: ${newHeight}px
`;
console.log(`窗口尺寸更新: 宽度 ${newWidth}px, 高度 ${newHeight}px`);
}
// 注册 resize 事件监听器
window.addEventListener("resize", handleResize);
// 页面加载时立即调用一次,以获取初始尺寸
handleResize();代码解析:
在 React 等现代前端框架中,为了更好地管理状态和副作用,通常会将这种逻辑封装成自定义 Hook。以下是一个 useWindowSize Hook 的示例,它能在 React 组件中方便地获取和响应窗口尺寸。
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() {
// 更新状态
setWindowSize({
width: window.innerWidth,
height: window.innerHeight
});
}
// 注册 resize 事件监听器
window.addEventListener('resize', handleResize);
// 组件挂载时立即调用一次,获取初始尺寸
handleResize();
// 返回一个清理函数,在组件卸载时移除事件监听器
return () => window.removeEventListener('resize', handleResize);
}, []); // 空依赖数组表示此 effect 只在组件挂载和卸载时运行一次
return windowSize;
}useWindowSize Hook 的使用示例:
import React from 'react';
import { useWindowSize } from './useWindowSize'; // 假设 useWindowSize 在同一文件或路径下
function MyResponsiveComponent() {
const { width, height } = useWindowSize();
if (width === undefined || height === undefined) {
return <div>正在获取窗口尺寸...</div>;
}
return (
<div>
<h1>我的响应式组件</h1>
<p>当前窗口宽度: {width}px</p>
<p>当前窗口高度: {height}px</p>
{width < 768 ? (
<p>这是一个小屏幕设备。</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/1115">
<img src="https://img.php.cn/upload/ai_manual/001/246/273/68b6d8f7c530c315.png" alt="即梦AI">
</a>
<div class="aritcle_card_info">
<a href="/ai/1115">即梦AI</a>
<p>一站式AI创作平台,免费AI图片和视频生成。</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="即梦AI">
<span>16094</span>
</div>
</div>
<a href="/ai/1115" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="即梦AI">
</a>
</div>
) : (
<p>这是一个大屏幕设备。</p>
)}
</div>
);
}
export default MyResponsiveComponent;代码解析:
在实际应用中,处理 resize 事件时需要考虑一些性能和用户体验方面的最佳实践。
resize 事件在用户拖动窗口时会频繁触发,这可能导致 handleResize 函数被反复调用,如果函数内部执行了复杂的 DOM 操作或计算,可能会引起性能问题。
可以使用 Lodash 等库提供的 debounce 或 throttle 函数,或者手动实现。
防抖示例:
function debounce(func, delay) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), delay);
};
}
const debouncedHandleResize = debounce(handleResize, 200); // 200毫秒防抖
window.addEventListener("resize", debouncedHandleResize);
handleResize(); // 首次调用仍然需要无论是原生 J*aScript 还是 React Hook,都应该在组件加载或脚本执行时立即调用一次处理函数,以确保在任何 resize 事件发生之前,应用程序就已经获取并使用了正确的窗口尺寸。
在原生 J*aScript 中,如果页面跳转或元素被移除,需要手动调用 window.removeEventListener()。在 React useEffect 中,通过返回一个清理函数,可以确保在组件卸载时自动移除监听器,避免内存泄漏。
对于大多数基于断点的响应式布局调整,CSS Media Queries 仍然是首选方案,因为它更具声明性且性能更优。J*aScript 应该用于处理那些 CSS 无法直接实现或需要动态计算的响应式行为。
通过 window.innerWidth、window.innerHeight 和 window.addEventListener('resize', ...),我们可以有效地在 J*aScript 中获取并响应浏览器窗口的尺寸变化。在原生 JS 环境中,需要手动管理事件监听器的注册和清理;而在 React 等框架中,通过自定义 Hook 可以更优雅地封装这一逻辑,实现状态管理和生命周期控制。同时,为了优化性能和用户体验,合理运用防抖和节流技术是至关重要的。
以上就是J*aScript 实时监测与获取浏览器窗口尺寸教程的详细内容,更多请关注其它相关文章!
# 这是一个
# 安徽优化关键词排名系统
# 济南企业品牌网站建设
# 增城网站排名推广优化
# 南京怎么优化企业网站
# 优质网站建设具备哪些
# 西藏seo入门的好方法
# 章丘网站建设斯文
# 小蓄科技一站式网站推广
# 如何运营淘宝店铺seo
# 宁河公司网站建设
# 加载
# 适用于
# 首次
# 拖动
# 时间内
# css
# 移除
# 防抖
# 自定义
# 回调
# 工具
# 回调函数
# app
# 浏览器
# windows
# 前端
# js
# html
# java
# javascript
# react
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画
CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条
睡觉时心跳快是什么原因 夜间心悸如何应对
汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口
《全民k歌》网页版最新登录入口一览
如何在mysql中使用索引提示_mysql索引提示优化方法
百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置
Go App Engine 项目结构与包管理深度指南
铁路12306官网入口 铁路12306中国铁路官网登录首页
iSpring三分屏制作教程
windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化
Python测试中模块导入路径解析的最佳实践
Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制
sf漫画官网登录入口直达_sf漫画官方正版网址
《下一站江湖2》心法融合技巧
在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示
C++二维数组动态分配方法_C++指针与数组内存布局
搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能
C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏
FullCalendar自定义按钮样式定制指南
喜茶GO更换登录账号方法
如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战
《微信》视频号原创声明开启方法
VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略
餐馆菜篮选购指南
实现可重用自定义Python Range类
mysql中如何分析索引使用情况_mysql索引使用分析方法
《杖剑传说》食谱大全
解决异步Python机器人中同步操作的阻塞问题
秋风萧瑟洪波涌起中的萧瑟指的是什么
《深林》冬季章节图文攻略
word页码灰色不能用如何解决
知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法
mysql中如何配置字符集和排序规则_mysql字符集排序配置
《环球网校》设置报考省市方法
微信客户端怎么查看二维码_微信客户端个人二维码查看方法
163邮箱登录入口官网 163.com邮箱登录入口
京东物流快递破损了怎么办_京东快递破损理赔流程
ToDesk远程摄像头功能使用方法_ToDesk远程视频画面查看设置教程
Linux如何开发轻量级数据服务模块_Linux服务化设计
Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能
Python高效统计字典嵌套列表值在目标列表中的出现次数
优酷官网登录入口电脑版 优酷官网网址入口
TikTok网页版入口快速访问 TikTok官网账号登录方法
繁花漫画使用教程
汽水音乐车机版 汽水音乐车机版官方入口
《漫蛙manwa2》防走失网页版链接2025
风神瞳获取全攻略
创建快捷方式启动系统保护
多多买菜门店端app订单查看方法
2025-10-25
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。