javascript怎样检测屏幕尺寸_如何获取设备的宽度和高度?
发布时间 - 2026-01-05 00:00:00 点击率:次最常用且可靠的方式是用 window.innerWidth 和 window.innerHeight 获取视口尺寸,它们返回浏览器可视区域宽高(不含滚动条),响应式强、实时更新;screen.width 和 screen.height 则返回设备物理屏幕逻辑像素尺寸,不随横竖屏自动变化;推荐布局适配用 innerWidth + resize 事件(需防抖),断点判断优先用 matchMedia,调试硬件才用 screen。
用 window.innerWidth 和 window.innerHeight 获取视口尺寸
这是最常用、最可靠的方式,返回的是当前浏览器窗口的可视区域(不含滚动条)宽高,单位为像素。它响应式强,页面缩放或窗口拖拽时会实时变化。
注意:不是设备物理屏幕尺寸,而是用户当前看到的“窗口”大小。移动端横竖屏切换时也会立即更新。
-
window.innerWidth包含垂直滚动条宽度(Chrome/Firefox),Safari 则不包含 —— 如果需要精确布局,建议用document.documentElement.clientWidth替代(它始终排除滚动条) - 在 iframe 中,获取的是该 iframe
的视口尺寸,不是顶层窗口 - 服务端渲染(SSR)环境无
window对象,直接访问会报ReferenceError: window is not defined
console.log(window.innerWidth); // 例如:375(iPhone 竖屏) console.log(window.innerHeight); // 例如:667
用 screen.width 和 screen.height 获取设备屏幕原始分辨率
这两个属性返回的是设备物理屏幕的完整像素尺寸,和浏览器窗口无关。但要注意:它们不随横竖屏旋转而自动更新(iOS Safari 尤其明显),且受系统缩放、DPR 影响,数值未必等于 CSS 像素。
-
screen.width/screen.height是只读的,不可写 - 在桌面端基本稳定;但在移动端,某些 Android 浏览器可能返回缩放后的值,iOS Safari 在横屏时仍返回竖屏数值(如 iPhone 13 始终报 414×896)
- 想获取真实物理像素?需结合
window.devicePixelRatio:例如screen.width * window.devicePixelRatio是近似物理宽度(但仍有平台差异)
console.log(screen.width); // 例如:414(逻辑像素,非物理) console.log(screen.height); // 例如:896 console.log(window.devicePixelRatio); // 例如:3(iPhone 13)
监听窗口尺寸变化:用 resize 事件而非轮询
不要用 setInterval 定期查 innerWidth —— 开销大且不精准。浏览器原生 resize 事件更高效,但触发频繁,需防抖。
- 移动端键盘弹出、地址栏收起都会触发
resize,不一定代表用户真的拖动了窗口 - 首次加载时事件不会触发,记得手动调用一次初始化逻辑
- 使用
addEventListener绑定,避免覆盖已有监听器;销毁时用removeEventListener(需保留函数引用)
function handleResize() {
console.log('视口变为:', window.innerWidth, 'x', window.innerHeight);
}
window.addEventListener('resize', handleResize);
// 初始化
handleResize();响应式判断别只看数字:优先用 matchMedia 做媒体查询检测
硬编码 if (width > 768) 容易失效 —— 比如 iPad Pro 横屏时 innerWidth 可能达 1024,但实际是移动体验。CSS 媒体查询才是语义化标准。
-
matchMedia('(max-width: 768px)')返回MediaQueryList对象,.matches属性即当前是否匹配 - 支持监听变化:
mediaQuery.addListener(handler)(旧 API)或mediaQuery.addEventListener('change', handler)(新 API) - 比手动读取
innerWidth更健壮:它和 CSS 渲染引擎同步,不受 JS 执行时机影响
const mobileQuery = window.matchMedia('(max-width: 768px)');
console.log(mobileQuery.matches); // true 或 false
mobileQuery.addEventListener('change', e => {
console.log('断点状态变更:', e.matches);
});设备像素比、缩放、iframe 嵌套、SSR 环境、键盘弹出……这些因素会让“屏幕尺寸”变成一个上下文敏感的值。没有银弹,得根据具体场景选 API:布局适配用 innerWidth + resize,设计断点用 matchMedia,调试硬件能力才碰 screen。
# css
# javascript
# java
# android
# js
# 编码
# 浏览器
# iphone
# ipad
# safari
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
JavaScript模板引擎Template.js使用详解
使用Dockerfile构建java web环境
如何破解联通资金短缺导致的基站建设难题?
Laravel如何记录自定义日志?(Log频道配置)
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
HTML 中动态设置元素 name 属性的正确语法详解
中国移动官方网站首页入口 中国移动官网网页登录
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何自定义建站之星模板颜色并下载新样式?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
怎样使用JSON进行数据交换_它有什么限制
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
如何实现javascript表单验证_正则表达式有哪些实用技巧
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
利用JavaScript实现拖拽改变元素大小
如何续费美橙建站之星域名及服务?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何生成URL和重定向?(路由助手函数)
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
php json中文编码为null的解决办法
如何在橙子建站上传落地页?操作指南详解
lovemo网页版地址 lovemo官网手机登录
如何在云主机快速搭建网站站点?
Mybatis 中的insertOrUpdate操作
如何在云主机上快速搭建网站?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
如何快速配置高效服务器建站软件?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Python文本处理实践_日志清洗解析【指导】
微信小程序 配置文件详细介绍
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Java解压缩zip - 解压缩多个文件或文件夹实例
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
js实现获取鼠标当前的位置
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
网站图片在线制作软件,怎么在图片上做链接?
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何打造高效商业网站?建站目的决定转化率


的视口尺寸,不是顶层窗口