Expo 触觉
一个提供访问 Android 系统振动效果、iOS 触觉引擎以及 Web 上 Web 振动 API 的库。
expo-haptics 提供以下触觉反馈:
- 使用 Vibrator 系统服务的 Android 设备。
- 使用 Taptic Engine 的 iOS 10+ 设备。
- Web 平台使用 Web Vibration API。
在 iOS 上,如果用户设备上满足以下任一条件,Taptic 引擎将不执行任何操作:
🌐 On iOS, the Taptic engine will do nothing if any of the following conditions are true on a user's device:
- 低电量模式已启用。可以通过
expo-battery检测到。 - 用户在设置中禁用了 Taptic Engine。
- iOS 相机处于活动状态(以防止不稳定)。
- iOS 听写处于活动状态(不会干扰麦克风输入)。
在网页上,该库使用 Web 震动 API。请注意以下事项:
🌐 On web, the library uses the Web Vibration API. Note the following:
- 该 API 必须得到浏览器支持(请检查浏览器兼容性)
- 设备必须配备振动硬件
- 用户必须授予使用振动(通常是自动)的权限。
- 某些浏览器可能会在某些情况下忽略振动(例如,后台标签页)。
安装
🌐 Installation
- npx expo install expo-hapticsIf you are installing this in an existing React Native app, make sure to install expo in your project.
配置
🌐 Configuration
在 Android 上,该库需要权限来控制设备的振动。VIBRATE 权限会自动添加。
🌐 On Android, this library requires permission to control vibration on the device. The VIBRATE permission is added automatically.
用法
🌐 Usage
import { StyleSheet, View, Text, Button } from 'react-native'; import * as Haptics from 'expo-haptics'; export default function App() { return ( <View style={styles.container}> <Text style={styles.text}>Haptics.selectionAsync</Text> <View style={styles.buttonContainer}> <Button title="选择" onPress={() => Haptics.selectionAsync()} /> </View> <Text style={styles.text}>Haptics.notificationAsync</Text> <View style={styles.buttonContainer}> <Button title="成功" onPress={ () => Haptics.notificationAsync( Haptics.NotificationFeedbackType.Success ) } /> <Button title="错误" onPress={ () => Haptics.notificationAsync( Haptics.NotificationFeedbackType.Error ) } /> <Button title="警告" onPress={ () => Haptics.notificationAsync( Haptics.NotificationFeedbackType.Warning ) } /> </View> <Text style={styles.text}>Haptics.impactAsync</Text> <View style={styles.buttonContainer}> <Button title="光" onPress={ () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light) } /> <Button title="中等" onPress={ () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium) } /> <Button title="重" onPress={ () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy) } /> <Button title="僵硬" onPress={ () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Rigid) } /> <Button title="柔软" onPress={ () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Soft) } /> </View> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', paddingHorizontal: 16, }, buttonContainer: { flexDirection: 'row', alignItems: 'stretch', marginTop: 10, marginBottom: 30, justifyContent: 'space-between', }, });
应用接口
🌐 API
import * as Haptics from 'expo-haptics';
Methods
| Parameter | Type | Description |
|---|---|---|
| style(optional) | ImpactFeedbackStyle | A collision indicator that on Android is simulated using Default: ImpactFeedbackStyle.Medium |
Promise<void>A Promise which fulfills once native size haptics functionality is triggered.
See: Android's
VibratorAPI is not recommended for implementing haptics feedback. Instead, you should useperformAndroidHapticsAsync, which is similar to iOS haptic feedback and does not requireVIBRATEpermission.
| Parameter | Type | Description |
|---|---|---|
| type(optional) | NotificationFeedbackType | A notification feedback type that on Android is simulated using Default: NotificationFeedbackType.Success |
The kind of notification response used in the feedback.
Promise<void>A Promise which fulfills once native size haptics functionality is triggered.
| Parameter | Type |
|---|---|
| type | AndroidHaptics |
Use the device haptics engine to provide physical feedback to the user.
Promise<void>Used to let a user know when a selection change has been registered.
Promise<void>A Promise which fulfills once native size haptics functionality is triggered.
Enums
AndroidHaptics.Clock_Tick = "clock-tick"The user has pressed either an hour or minute tick of a Clock.
AndroidHaptics.Confirm = "confirm"A haptic effect to signal the confirmation or successful completion of a user interaction.
AndroidHaptics.Context_Click = "context-click"The user has performed a context click on an object.
AndroidHaptics.Drag_Start = "drag-start"The user has started a drag-and-drop gesture. The drag target has just been "picked up".
AndroidHaptics.Gesture_End = "gesture-end"The user has finished a gesture (for example, on the soft keyboard).
AndroidHaptics.Gesture_Start = "gesture-start"The user has started a gesture (for example, on the soft keyboard).
AndroidHaptics.Keyboard_Press = "keyboard-press"The user has pressed a virtual or software keyboard key.
AndroidHaptics.Keyboard_Release = "keyboard-release"The user has released a virtual keyboard key.
AndroidHaptics.Long_Press = "long-press"The user has performed a long press on an object that results in an action being performed.
AndroidHaptics.Reject = "reject"A haptic effect to signal the rejection or failure of a user interaction.
AndroidHaptics.Segment_Frequent_Tick = "segment-frequent-tick"The user is switching between a series of many potential choices. For example, minutes on a clock face or individual percentages. This constant is expected to be very soft, so as not to be uncomfortable when performed a lot in quick succession. If the device can't make a suitably soft vibration, then it may not make any vibration.
AndroidHaptics.Segment_Tick = "segment-tick"The user is switching between a series of potential choices. For example, items in a list or discrete points on a slider.
AndroidHaptics.Text_Handle_Move = "text-handle-move"The user has performed a selection/insertion handle move on text field.
AndroidHaptics.Toggle_Off = "toggle-off"The user has toggled a switch or button into the off position.
AndroidHaptics.Toggle_On = "toggle-on"The user has toggled a switch or button into the on position.
AndroidHaptics.Virtual_Key = "virtual-key"The user has pressed on a virtual on-screen key.
The mass of the objects in the collision simulated by a UIImpactFeedbackGenerator object
UINotificationFeedbackStyle.
ImpactFeedbackStyle.Medium = "medium"A collision between moderately sized user interface elements.
ImpactFeedbackStyle.Rigid = "rigid"A collision between user interface elements that are rigid, exhibiting a small amount of compression or elasticity.
The type of notification feedback generated by a UINotificationFeedbackGenerator object.
UINotificationFeedbackType.
NotificationFeedbackType.Error = "error"A notification feedback type indicating that a task has failed.
NotificationFeedbackType.Success = "success"A notification feedback type indicating that a task has completed successfully.