innerWidth 在移动设备上没有得到正确的宽度

Posted

技术标签:

【中文标题】innerWidth 在移动设备上没有得到正确的宽度【英文标题】:innerWidth not getting the correct width on mobile 【发布时间】:2016-03-06 02:46:01 【问题描述】:

我在下面有一个代码,它试图通过他们设备的 innerWidth 来确定某人是从移动设备还是桌面访问我的网站。但是,当我尝试从我的手机获取 innerWidth 时,它显示我的手机的宽度是 980px?不过,我的手机的宽度不可能接近那么宽。我的手机宽度约为:300px,高度约为 500px。在我的桌面上,它显示 1280 像素,这是正确的。我的问题是,为什么我的手机显示错误的宽度?除非有什么我理解不正确?

<?php
include("ajaxLink.php");
?>

<script>

$(function()

var width =  window.innerWidth;

alert(width);

if (width > 500) 
alert("going to index");
window.location = "/";
 //end of if (width > 500)
else 
alert("going to mobile");
window.location = "mobile.php";
 //end of else (width <= 500)

);

</script>

【问题讨论】:

大约:300px ?查看您设备的规格。在 chrome 中测试此代码 device mode @RayonDabre 我们说的是宽度,从左到右,高度是从上到下,对吧? 【参考方案1】:

window.innerWidth 代表大多数移动设备上的视口像素,而不是物理像素。您应该能够通过巧妙地使用 doctype 声明(例如......实际上声明一个 doctype)以及在 head 部分中包含 meta viewport 标记来解决这个问题。以下是来自this article 的引用,详细介绍了您的具体问题:

但是当视口没有受到限制,并且使用了 html5 文档类型(或根本不使用)时,innerWidth 将突然开始表示比物理屏幕大得多的值:并表示视口画布的宽度,页面已渲染。

例如,在纵向 iPhone 上,默认视口为 980 像素。在横向 iPhone 上,根据 window.innerWidth, 981(是的,真的)。

我会试试这个:

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    </head>

根据quirksmode,window.outerWidth 在缩放时也会从实际像素跳转到视口像素。

【讨论】:

以上是关于innerWidth 在移动设备上没有得到正确的宽度的主要内容,如果未能解决你的问题,请参考以下文章

浏览器可视区大小简说(clientWidth,innerWidth)

Javascript 如何在移动设备上画布绘图工作

下列()方法获取元素的宽度只包括元素的宽度、内边距和边框

jQuery获取元素宽高

当我将屏幕大小调整为移动设备时,我的网站移动视图在桌面上正确显示隐藏元素,但在我的手机上它们没有隐藏

网格系统无法在移动设备或小屏幕上正确调整大小