ä¼ æå¨ APIï¼Sensor APIsï¼æ¯ä¸ç»ç»ä¸è®¾è®¡çæ¥å£ï¼å®ä»¬å¨ web å¹³å°ä¸ä¸ºåç±»ä¼ æå¨æä¾äºä¸è´çè®¿é®æ¹å¼ã
ä¼ æå¨ API çæ¦å¿µå使ç¨å°½ç®¡éç¨ä¼ æå¨ API è§èï¼Generic Sensor API specificationï¼å®ä¹äºä¸ä¸ª Sensor
æ¥å£ï¼ä½ä½ä¸º web å¼åè
ä¸åºè¯¥ç´æ¥ä½¿ç¨å®ãä½ åºè¯¥ä½¿ç¨å®çæä¸ªåç±»æ¥è·å¾æå®çä¼ æå¨æ°æ®ãä¾å¦ï¼accelerometer
æ¥å£è¿å设å¤å½å沿ææä¸ä¸ªè½´çå é度ã
ä¼ æå¨æ¥å£ä¸ä¸å®ä¸ç©çä¸çä¼ æå¨ä¸ä¸å¯¹åºãä¾å¦ï¼Gyroscope
æ¥å£ç¡®å®ä¸ä¸ä¸ªåç¬çç©çå¨ä»¶æ¥å£å¯¹åºï¼ä½AbsoluteOrientationSensor
æ¥å£æä¾çä¿¡æ¯åæ¯æ¥èªä¸¤ä¸ªææ´å¤ä¼ æå¨å¨ä»¶çæ°æ®éè¿ç®æ³å¾å°çãè¿ä¸¤ç±»ä¼ æå¨åå«è¢«ç§°ä¸ºä½çº§çï¼low-levelï¼åé«çº§çï¼high-levelï¼ãåè
ä¹è¢«ç§°ä¸ºèåä¼ æå¨ï¼fusion sensorï¼ï¼æè
èæï¼virtualï¼ä¼ æå¨ï¼æç§°åæï¼syntheticï¼ä¼ æå¨ã
ä¼ æå¨æ¥å£ä» ä» æ¯åºå±å¨ä»¶ä¼ æå¨ç代çãå æ¤ï¼ç¸æ¯å ¶ä» APIï¼ä¼ æå¨åè½æ£æµæ´ä¸ºå¤æãä¼ æå¨ API çåå¨å¹¶ä¸è½åè¯ä½ API æ¯å¦ä¸ä¸ä¸ªçå®çç¡¬ä»¶ä¼ æå¨ç¸è¿ï¼å³ä½¿ç¸è¿å®æ¯å¦å¨å·¥ä½ï¼çè³ç¨æ·æ¯å¦å·²ç»ææè®¿é®å®ãè¦ä¸è´å°æä¾ææè¿äºä¿¡æ¯æ¯è¦æ¶èæ§è½åçµæ± çµéçã
å æ¤ï¼ä¼ æå¨ API çåè½æ£æµå¿ é¡»å å« API æ¬èº«çæ£æµä»¥åé²å¾¡æ§ç¼ç¨çç¥ï¼è§ä¸ï¼ï¼defensive programming strategiesï¼ã
ä¸é¢çä¾åå±ç¤ºäºæ£æµä¼ æå¨ API çä¸ç§æ¹æ³ãæ¤å¤ä½ è¿å¯ä»¥æå¯¹è±¡å®ä¾åé¨åæ¾å¨ä¸ä¸ªtry...catch
åä¸ã注æéè¿ä½ å¹¶ä¸è½éè¿Navigator
æ¥å£æ¥å®ç°ä¼ æå¨æ£æµã
if (typeof Gyroscope === "function") {
// run in circles...
}
if ("ProximitySensor" in window) {
// watch out!
}
if (window.AmbientLightSensor) {
// go dark...
}
许å¯ååè½çç¥
åªæç¨æ·å¯¹é对æç§ç±»åçä¼ æå¨ææä¹åï¼æè½å¯¹è¯¥ç±»ä¼ æå¨è¿è¡è¯»åãç¨Permissions
API æ¥è¿è¡è¿ç§ææãä¸é¢çå°ä¾åå±ç¤ºäºå¨è¯å¾ä½¿ç¨ä¼ æå¨ä¹åé¦å
è¯·æ±ææã
navigator.permissions.query({ name: 'accelerometer' })
.then(result => {
if (result.state === 'denied') {
console.log('Permission to use accelerometer sensor is denied.');
return;
}
// Use the sensor.
}
å¦å¤ä¸ç§æ¹å¼æ¯å©ç¨é误并侦å¬SecurityError
äºä»¶ã
const sensor = new AbsoluteOrientationSensor();
sensor.start();
sensor.onerror = (event) => {
if (event.error.name === "SecurityError")
console.log("No permissions to use AbsoluteOrientationSensor.");
};
ä¸è¡¨æè¿°äºæ¯ç§ä¼ æå¨ç±»åï¼ä½¿ç¨å®ä»¬å¨ Permissions APIã<iframe>
å
ç´ ä¸allow
屿§ï¼ä»¥åPermissions-Policy
è¯å¥ä¸è¢«å¼ç¨æ¶ä½¿ç¨çååã
AbsoluteOrientationSensor
'accelerometer'
, 'gyroscope'
, and 'magnetometer'
Accelerometer
'accelerometer'
AmbientLightSensor
'ambient-light-sensor'
Gyroscope
'gyroscope'
LinearAccelerationSensor
'accelerometer'
Magnetometer
'magnetometer'
RelativeOrientationSensor
'accelerometer'
, and 'gyroscope'
读æ°
ä¼ æå¨è¯»æ°éè¿Sensor.onreading
åè°å½æ°è·å¾ï¼è¯¥åè°å½æ°è¢«ææä¼ æå¨ç±»åç»§æ¿ã读åé¢çå¯éè¿å¨ä¼ æå¨çæé 彿°ä¸å¸¦ç¸åºçéé¡¹æ¥æå®ãæ¤é项æ¯ä¸ä¸ªæ°å¼ï¼å®æå®æ¯ç§è¯»åçæ¬¡æ°ãå¯ä½¿ç¨æ´æ°æå°æ°ï¼åè
ç¨äºé¢çä½äºæ¯ç§ä¸æ¬¡çæ
åµãå®é
ç读åé¢çä¾èµäºå¨ä»¶ç硬件å®ç°å èå¯è½å°äºæè¯·æ±çé¢çã
ä¸é¢ä»¥Magnetometer
为ä¾å±ç¤ºä½¿ç¨æ¹æ³ã
let magSensor = new Magnetometer({ frequency: 60 });
magSensor.addEventListener("reading", (e) => {
console.log("Magnetic field along the X-axis " + magSensor.x);
console.log("Magnetic field along the Y-axis " + magSensor.y);
console.log("Magnetic field along the Z-axis " + magSensor.z);
});
magSensor.addEventListener("error", (event) => {
console.log(event.error.name, event.error.message);
});
magSensor.start();
é²å¾¡æ§ç¼ç¨
é²å¾¡æ§ç¼ç¨ï¼defensive programmingï¼è¦éµå¾ªä¸é¢ä¸ä¸ªååï¼
ä¸é¢ç示ä¾ä»£ç 说æä»¥ä¸ååãtry...catch
代ç åææå¨å®ä¾åä¼ æå¨æ¶æåºçé误ãå®å®ç°äºä¸ä¸ªSensor.onerror
å¤ç彿°ä»¥ææä½¿ç¨ä¸æåºçé误ãå®åªå¨ä»¥ä¸æ
åµä¸æç¤ºç¨æ·ï¼éè¦è¯·æ±æéæ¶ï¼ä»¥åæè¯·æ±çä¼ æå¨ç±»åå¨è®¾å¤ä¸ä¸æ¯ææ¶ã
夿³¨ï¼ 妿ä¸ä¸ªæéçç¥ï¼permission policyï¼é»æ¢äºå¯¹æåè½ç使ç¨ï¼è¿æ¯å ä¸ºä½ ç代ç ä¸ä½ çæå¡å¨ä¸è®¾ç½®ççç¥ä¸ä¸è´ãè¿ç§æ
嵿¯ä¸åºè¯¥æ¾ç¤ºç»ç¨æ·ççãå
·ä½å®ç°è¯·åè§ Permissions-Policy
ã
let accelerometer = null;
try {
accelerometer = new Accelerometer({ referenceFrame: "device" });
accelerometer.addEventListener("error", (event) => {
// Handle runtime errors.
if (event.error.name === "NotAllowedError") {
// Branch to code for requesting permission.
} else if (event.error.name === "NotReadableError") {
console.log("Cannot connect to the sensor.");
}
});
accelerometer.addEventListener("reading", () => reloadOnShake(accelerometer));
accelerometer.start();
} catch (error) {
// Handle construction errors.
if (error.name === "SecurityError") {
// See the note above about feature policy.
console.log("Sensor construction was blocked by a feature policy.");
} else if (error.name === "ReferenceError") {
console.log("Sensor is not supported by the User Agent.");
} else {
throw error;
}
}
æ¥å£
AbsoluteOrientationSensor
æè¿°ç¸å¯¹äºå°çåèåæ ç³»ç设å¤ç©çæ¹åã
Accelerometer
æä¾æ²¿ä¸ä¸ªè½´çå é度ã
AmbientLightSensor
è¿åå½åå ç §å¼ºåº¦æç¯å¢å ç §åº¦ã
Gyroscope
æä¾ä¸ä¸ªè½´åçè§é度ã
LinearAccelerationSensor
æä¾å»é¤éåè´¡ç®é¨åä¹åçæ²¿ä¸ä¸ªè½´çå é度ã
Magnetometer
æä¾ç±è®¾å¤ä¸»ç£ä¼ æå¨æ£æµå°çç£åºä¿¡æ¯ã
OrientationSensor
AbsoluteOrientationSensor
çåºç±»ãæ¬æ¥å£ä¸è½ç´æ¥ä½¿ç¨ã宿ä¾å
¶ç»§æ¿ç±»å¯è®¿é®ç屿§åæ¹æ³ã
RelativeOrientationSensor
æè¿°è®¾å¤ä¸å°çåèåæ ç³»æ å ³çç©çæ¹åã
Sensor
ææå ¶ä»ä¼ æå¨æ¥å£çåºç±»ãæ¬æ¥å£ä¸è½ç´æ¥ä½¿ç¨ã宿ä¾å ¶ç»§æ¿ç±»å¯è®¿é®ç屿§ãäºä»¶å¤ç彿°åæ¹æ³ã
SensorErrorEvent
æä¾ç±Sensor
æå
¶ç¸å
³çæ¥å£æåºçé误çä¿¡æ¯ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4