苹果的iPad Mini在很多方面都是iPad 2的小复制品。在JavaScript中,是窗口。navigator对象为Mini和iPad 2暴露相同的值。到目前为止,我为检测差异而进行的测试还没有成功。

为什么这很重要?

由于iPad Mini和iPad 2的屏幕像素相同,但实际尺寸(英寸/厘米)不同,它们的PPI(每英寸像素)也不同。

为了提供友好的用户界面,web应用程序和游戏会根据用户的拇指或手指位置调整某些元素的大小,因此,我们可能想要缩放某些图像或按钮以提供更好的用户体验。

到目前为止我尝试过的事情(包括一些非常明显的方法):

window.devicepixelratio CSS元素宽度,单位为cm CSS媒体查询(如分辨率和-webkit-device-pixel-ratio) SVG图形在类似的单位 在设定的时间内进行各种CSS webkit转换,并使用requestAnimFrame计算呈现的帧数(我希望检测到可测量的差异)

我没办法了。你呢?

更新 谢谢你的回复。我想对那些投票反对检测iPad mini和iPad 2的人发表评论,因为苹果有一个规则。好吧,这是我的理由,为什么我觉得知道一个人用的是iPad mini还是iPad 2真的很有意义。随你怎么解释我的推理。

The iPad mini is not only a much smaller device (9.7 inch versus 7.9 inch), but its form factor allows for a different usage. The iPad 2 is usually held with two hands when gaming unless you're Chuck Norris. The mini is smaller, but it is also much lighter and allows for gameplay where you hold it in one hand and use another to swipe or tap or whatnot. As a game designer and developer myself, I'd just like to know if it's a mini so I can choose to provide the player with a different controlscheme if I want (for instance after A/B testing with a group of players).

为什么?事实证明,大多数用户倾向于使用默认设置,所以当玩家第一次加载游戏时,不要使用虚拟拇指杆,而是在屏幕上放置一些基于点击的控制,这是我和其他游戏设计师希望能够做到的。

所以恕我说,这超出了粗手指/指导方针的讨论,这是苹果和所有其他供应商应该做的事情:允许我们唯一地识别你的设备,以不同的方式思考,而不是遵循指导方针。


当前回答

那么微基准测试呢,在iPad 2上计算大约需要X微秒,在iPad mini上计算大约需要Y秒。

这可能不够准确,但iPad mini的芯片可能在某些指令上更有效率。

其他回答

在iOS7中,用户可以调整一个系统范围的设置:当内容太小而无法阅读时,可以更改文本大小设置。

文本大小可以用来形成合理尺寸的UI,例如按钮(在iPad Mini Retina上测试,以响应文本大小设置的变化):

padding: 0.5em 1em 0.5em 1em;
font: -apple-system-body;    

(示例按钮CSS,感谢jsfiddle和cssbuttongenerator)

是的,这是一个检查陀螺仪的好点。 你可以很容易地做到

https://developer.apple.com/documentation/webkitjs/devicemotionevent

或者类似的东西

window.ondevicemotion = function(event) {
    if (navigator.platform.indexOf("iPad") != -1 && window.devicePixelRatio == 1) {
        var version = "";
        if (event.acceleration) version = "iPad2";
        else version="iPad Mini";

        alert(version);
    }
    window.ondevicemotion = null;
}​

没有ipad来测试。

更新:看起来这些值在创建选项卡时报告了视口的宽度和高度,它们在旋转时不会改变,所以这个方法不能用于设备检测!

你可以使用任意一个屏幕。availWidth或screen。availHeight,因为他们似乎是不同的iPad Mini和iPad 2。

iPad迷你

screen.availWidth = 768
screen.availHeight = 1004

iPad 2

screen.availWidth = 748
screen.availHeight = 1024

来源:http://konstruktors.com/blog/web-design/4396-detect-ipad-mini-javascript/

让用户从离地面几千英尺的高空扔下他们的iPad。然后使用内部加速度计来测量iPad达到终端速度所需的时间。更大的iPad阻力系数更大,达到终端速度的时间应该比iPad Mini更短。

下面是一些示例代码,可以帮助您入门。

function isIPadMini( var timeToReachTerminalVelocity )
{
    return (timeToReachTerminalVelocity > IPAD_MINI_THRESHOLD);
}

当苹果不可避免地以不同的形式发布下一代iPad时,你几乎肯定需要重新审视这段代码。但我相信你会继续跟进事情,并为每一个新版本的iPad保持这个hack。

这是一个疯狂的镜头,但iPad 2和iPad mini的区别之一是前者没有三轴陀螺仪。也许可以使用WebKit设备定向API来查看您可以从中获得什么样的信息。

例如,该页似乎建议您只有在设备具有陀螺仪时才能获得rotationRate值。

对不起,我不能给一个工作POC -我没有访问iPad mini。也许对这些定向api有更多了解的人可以在这里插话。