welsonjs/node_modules/modernizr/feature-detects/proximity.js

62 lines
1.7 KiB
JavaScript

/*!
{
"name": "Proximity API",
"property": "proximity",
"authors": ["Cătălin Mariș"],
"tags": ["events", "proximity"],
"caniuse": "proximity",
"notes": [{
"name": "MDN Docs",
"href": "https://developer.mozilla.org/en-US/docs/Web/API/Proximity_Events"
}, {
"name": "W3C Spec",
"href": "https://www.w3.org/TR/proximity/"
}]
}
!*/
/* DOC
Detects support for an API that allows users to get proximity related information from the device's proximity sensor.
*/
define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
Modernizr.addAsyncTest(function() {
var timeout;
var timeoutTime = 300;
function advertiseSupport() {
// Clean up after ourselves
clearTimeout(timeout);
window.removeEventListener('deviceproximity', advertiseSupport);
// Advertise support as the browser supports
// the API and the device has a proximity sensor
addTest('proximity', true);
}
// Check if the browser has support for the API
if ('ondeviceproximity' in window && 'onuserproximity' in window) {
// Check if the device has a proximity sensor
// ( devices without such a sensor support the events but
// will never fire them resulting in a false positive )
window.addEventListener('deviceproximity', advertiseSupport);
// If the event doesn't fire in a reasonable amount of time,
// it means that the device doesn't have a proximity sensor,
// thus, we can advertise the "lack" of support
timeout = setTimeout(function() {
window.removeEventListener('deviceproximity', advertiseSupport);
addTest('proximity', false);
}, timeoutTime);
} else {
addTest('proximity', false);
}
});
});