在javascript中获取设备宽度
Get the device width in javascript
是否有一种方法来获得用户设备宽度,而不是viewport宽度,使用javascript?
CSS媒体查询提供了这个,因为我可以说
@media screen and (max-width:640px) {
/* ... */
}
和
@media screen and (max-device-width:960px) {
/* ... */
}
如果我的目标是横向智能手机,这很有用。例如,在iOS上,max-width:640px
的声明将同时针对横向和纵向模式,即使在iPhone 4上也是如此。据我所知,Android的情况并非如此,所以在这种情况下,使用device-width成功地瞄准了两个方向,而没有瞄准桌面设备。
然而,如果我调用基于设备宽度的javascript绑定,我似乎仅限于测试视口宽度,这意味着额外的测试,如下所示,
if ($(window).width() <= 960 && $(window).height <= 640) { /* ... */ }
这对我来说似乎不太优雅,因为提示css可以使用设备宽度。
您可以通过screen.width
属性获得设备屏幕宽度。有时,在处理桌面浏览器时,使用window.innerWidth
(通常不在移动设备上发现)而不是屏幕宽度也很有用,因为桌面浏览器的窗口大小通常小于设备屏幕大小。
通常,当处理移动设备和桌面浏览器时,我使用以下命令:
var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
Bryan Rieger的回答很有用,其中一个问题是,在高密度显示屏上,苹果设备会报告屏幕。而Android设备则以物理像素报告。(参见http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html。)我建议在支持matchMedia的浏览器上使用if (window.matchMedia('(max-device-width: 960px)').matches) {}
。
我只是有这个想法,所以也许这是短视的,但它似乎工作得很好,可能是你的CSS和JS之间最一致的
在你的CSS中,你可以根据@media screen的值设置html的max-width值:
@media screen and (max-width: 480px) and (orientation: portrait){
html {
max-width: 480px;
}
... more styles for max-width 480px screens go here
}
然后,使用JS(可能通过JQuery之类的框架),您只需检查html标签的max-width值:
maxwidth = $('html').css('max-width');
现在你可以使用这个值来做条件修改:
If (maxwidth == '480px') { do something }
如果在html标记上放置max-width值看起来很可怕,那么也许您可以放置一个不同的标记,一个仅用于此目的的标记。对于我的目的,html标签工作得很好,不影响我的标记。
如果您正在使用Sass等,:返回一个更抽象的值,例如断点名称,而不是px值,您可以这样做:
- 创建一个存储断点名称的元素,例如
<div id="breakpoint-indicator" />
- 使用css媒体查询更改该元素的内容属性,例如:"large"或"mobile"等(与上面相同的基本媒体查询方法,但设置css 'content'属性而不是'max-width')。
- 获取css内容属性值使用js或jquery (jquery如
$('#breakpoint-indicator').css('content');
),返回"大",或"移动",等取决于什么内容属性设置为媒体查询。 - 作用于当前值
现在你可以像在sass中一样使用相同的断点名称,例如sass: @include respond-to(xs)
和js if ($breakpoint = "xs) {}
。
我特别喜欢的是,我可以在css中定义我的断点名称,并在一个地方(可能是一个变量scss文档),我的js可以独立地对它们进行操作。
你应该使用
document.documentElement.clientWidth
它被视为跨浏览器兼容性,与jQuery(window).width();用途。
详细信息请参见:https://ryanve.com/lab/dimensions/
检查
const mq = window.matchMedia( "(min-width: 500px)" );
if (mq.matches) {
// window width is at least 500px
} else {
// window width is less than 500px
}
https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia var width = Math.max(window.screen.width, window.innerWidth);
这应该可以处理大多数情况。
你可以很容易地使用
document.documentElement.clientWidth
例如:
let el = document.getElementById('result');
el.innerText = document.documentElement.clientWidth;
window.addEventListener('resize', function(event) {
// do what you want
el.innerText = document.documentElement.clientWidth;
}, true);
<!DOCTYPE html>
<html>
<body>
<div id="result"></div>
</body>
</html>
基于Bootstrap用来设置其响应断点的方法,以下函数根据屏幕宽度返回xs, sm, md, lg或xl:
console.log(breakpoint());
function breakpoint() {
let breakpoints = {
'(min-width: 1200px)': 'xl',
'(min-width: 992px) and (max-width: 1199.98px)': 'lg',
'(min-width: 768px) and (max-width: 991.98px)': 'md',
'(min-width: 576px) and (max-width: 767.98px)': 'sm',
'(max-width: 575.98px)': 'xs',
}
for (let media in breakpoints) {
if (window.matchMedia(media).matches) {
return breakpoints[media];
}
}
return null;
}
Lumia手机屏幕错误。宽度(至少在模拟器上)。所以也许Math.min(window.innerWidth || Infinity, screen.width)
将适用于所有设备?
或者更疯狂的:
for (var i = 100; !window.matchMedia('(max-device-width: ' + i + 'px)').matches; i++) {}
var deviceWidth = i;
也许你可以使用document.documentElement.clientWidth来获取客户端的设备宽度,并通过设置setInterval
来跟踪设备宽度就像
setInterval(function(){
width = document.documentElement.clientWidth;
console.log(width);
}, 1000);
仅供参考,有一个名为断点的库,它可以检测CSS中设置的最大宽度,并允许您在JS中使用<=, <,>,>=和==符号的if-else条件中使用它。我发现它很有用。负载大小小于3kb
- 从ajax请求中获取javascript对象
- 以同步方式获取Javascript Promise的值
- 获取javascript中的公钥格式
- 获取javascript函数中的按钮名称
- 如何在C#中获取Javascript变量值
- 从其名称获取javascript数组对象
- 如何从Selenium获取JavaScript值
- 如何获取javascript输入并在html中调用它
- 获取javascript函数中另一个javascript函数的响应
- 获取javascript中输入元素的索引
- 获取javascript中json_encoded数组的元素
- 在ajax请求中使用jquery获取javascript响应UJS
- 获取Javascript中单选按钮的true或false
- 获取javascript中的元数据属性
- 获取Javascript中DOM元素的screenX
- 如何在事件处理程序中获取 javascript 事件对象
- 使用 JQuery 从表单中获取 javascript 多维数组
- 获取 JavaScript 中复选框的值
- 如何从函数名称中获取JavaScript的源代码
- VBA中有没有一种方法可以获取javascript生成的元素