首页指南参考教程

Expo 触觉 iconExpo 触觉

一个库,可提供对 Android 系统振动效果和 iOS 触觉引擎的访问。

Android
iOS

expo-haptics 提供触觉(触摸)反馈:

¥expo-haptics provides haptic (touch) feedback for:

  • 使用 Vibrator 系统服务的 Android 设备。

    ¥Android devices using Vibrator system service.

  • 使用 Taptic Engine 的 iOS 10+ 设备。

    ¥iOS 10+ devices using the Taptic Engine.

在 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 检测到。

    ¥Low Power Mode is enabled. This can be detected with expo-battery.

  • 用户在设置中禁用了 Taptic Engine。

    ¥User disabled the Taptic Engine in settings.

  • iOS 相机处于活动状态(以防止不稳定)。

    ¥iOS Camera is active (to prevent destabilization).

安装

¥Installation

Terminal
npx expo install expo-haptics

If you are installing this in an existing React Native app (bare workflow), start by installing expo in your project. Then, follow the additional instructions as mentioned by library's README under "Installation in bare React Native projects" section.

配置

¥Configuration

在 Android 上,此库需要控制设备振动的权限。VIBRATE 权限会自动添加。

¥On Android, this library requires permission to control vibration on the device. The VIBRATE permission is added automatically.

用法

¥Usage

Haptics usage
import * as React from 'react';
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="Selection" onPress={() => Haptics.selectionAsync()} />
      </View>
      <Text style={styles.text}>Haptics.notificationAsync</Text>
      <View style={styles.buttonContainer}>
        <Button
          title="Success"
          onPress={
            () =>
              Haptics.notificationAsync(
                Haptics.NotificationFeedbackType.Success
              )
          }
        />
        <Button
          title="Error"
          onPress={
            () =>
              Haptics.notificationAsync(
                Haptics.NotificationFeedbackType.Error
              )
          }
        />
        <Button
          title="Warning"
          onPress={
            () =>
              Haptics.notificationAsync(
                Haptics.NotificationFeedbackType.Warning
              )
          }
        />
      </View>
      <Text style={styles.text}>Haptics.impactAsync</Text>
      <View style={styles.buttonContainer}>
        <Button
          title="Light"
          onPress={
            () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)
          }
        />
        <Button
          title="Medium"
          onPress={
            () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium)
          }
        />
        <Button
          title="Heavy"
          onPress={
            () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy)
          }
        />
        <Button
          title="Rigid"
          onPress={
            () => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Rigid)
          }
        />
        <Button
          title="Soft"
          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

Haptics.impactAsync(style)

NameTypeDescription
style
(optional)
ImpactFeedbackStyle

A collision indicator that on iOS is directly mapped to UIImpactFeedbackStyle, while on Android these are simulated using Vibrator. You can use one of Haptics.ImpactFeedbackStyle.{Light, Medium, Heavy}.

Default: ImpactFeedbackStyle.Medium

Returns:

Promise<void>

A Promise which fulfils once native size haptics functionality is triggered.

Haptics.notificationAsync(type)

NameTypeDescription
type
(optional)
NotificationFeedbackType

A notification feedback type that on iOS is directly mapped to UINotificationFeedbackType, while on Android these are simulated using Vibrator. You can use one of Haptics.NotificationFeedbackType.{Success, Warning, Error}.

Default: NotificationFeedbackType.Success

The kind of notification response used in the feedback.

Returns:

Promise<void>

A Promise which fulfils once native size haptics functionality is triggered.

Haptics.selectionAsync()

Used to let a user know when a selection change has been registered.

Returns:

Promise<void>

A Promise which fulfils once native size haptics functionality is triggered.

Enums

ImpactFeedbackStyle

The mass of the objects in the collision simulated by a UIImpactFeedbackGenerator object UINotificationFeedbackStyle

ImpactFeedbackStyle Values

Heavy

ImpactFeedbackStyle.Heavy = "heavy"

A collision between large, heavy user interface elements.

Light

ImpactFeedbackStyle.Light = "light"

A collision between small, light user interface elements.

Medium

ImpactFeedbackStyle.Medium = "medium"

A collision between moderately sized user interface elements.

Rigid

ImpactFeedbackStyle.Rigid = "rigid"

A collision between user interface elements that are rigid, exhibiting a small amount of compression or elasticity.

Soft

ImpactFeedbackStyle.Soft = "soft"

A collision between user interface elements that are soft, exhibiting a large amount of compression or elasticity.

NotificationFeedbackType

The type of notification feedback generated by a UINotificationFeedbackGenerator object. UINotificationFeedbackType

NotificationFeedbackType Values

Error

NotificationFeedbackType.Error = "error"

A notification feedback type indicating that a task has failed.

Success

NotificationFeedbackType.Success = "success"

A notification feedback type indicating that a task has completed successfully.

Warning

NotificationFeedbackType.Warning = "warning"

A notification feedback type indicating that a task has produced a warning.

Expo 中文网 - 粤ICP备13048890号