UNPKG

modernizr

Version:

Modernizr is a JavaScript library that detects HTML5 and CSS3 features in the user’s browser.

53 lines (47 loc) 2.18 kB
/*! { "name": "Touch Events", "property": "touchevents", "caniuse" : "touch", "tags": ["media", "attribute"], "notes": [{ "name": "Touch Events spec", "href": "https://www.w3.org/TR/2013/WD-touch-events-20130124/" }], "warnings": [ "Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device" ], "knownBugs": [ "False-positive on some configurations of Nokia N900", "False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695" ] } !*/ /* DOC Indicates if the browser supports the W3C Touch Events API. This *does not* necessarily reflect a touchscreen device: * Older touchscreen devices only emulate mouse events * Modern IE touch devices implement the Pointer Events API instead: use `Modernizr.pointerevents` to detect support for that * Some browsers & OS setups may enable touch APIs when no touchscreen is connected * Future browsers may implement other event models for touch interactions See this article: [You Can't Detect A Touchscreen](http://www.stucox.com/blog/you-cant-detect-a-touchscreen/). It's recommended to bind both mouse and touch/pointer events simultaneously – see [this HTML5 Rocks tutorial](http://www.html5rocks.com/en/mobile/touchandmouse/). This test will also return `true` for Firefox 4 Multitouch support. */ define(['Modernizr', 'prefixes', 'testStyles'], function(Modernizr, prefixes, testStyles) { // Chrome (desktop) used to lie about its support on this, but that has since been rectified: http://crbug.com/36415 Modernizr.addTest('touchevents', function() { var bool; if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { bool = true; } else { // include the 'heartz' as a way to have a non matching MQ to help terminate the join // https://git.io/vznFH var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join(''); testStyles(query, function(node) { bool = node.offsetTop === 9; }); } return bool; }); });