React Native实现理想的震动效果

news2024/11/24 10:52:06

React Native实现理想的震动效果

在这里插入图片描述

一、背景说明

业务开发中,总会用到一些和用户反馈的效果,用来提升用户对于某个事件或者操作的重要程度,比如常见的就是 长按复制、滑动或点击图表、点击底部TabBar时的反馈等操作。

二、构思实现及过程
2.1 方案一

当开始这个需求时,我们能够看到官方提供了震动效果的API 实现 Vibration,提供了震动反馈的方法

Vibration.vibrate(?pattern: number | Array<number>, ?repeat: boolean)

但从文档中我们发现,在Android系统中,我们能够通过参数进行修改震动反馈模式,我们能够调整到我们想要的效果,但是对于IOS系统,则是参数固定为400ms,这400ms这个效果对我们需求来说,算是比较长的一个反馈时常,触摸反馈是不符合我们的要求的。

因此,排除改方案,我们得继续寻求其他的方案。

2.2 方案二

继续寻找反馈相关类库,无意间发现【react-native-haptic-feedback】,发现有比较多的一些反馈效果

在这里插入图片描述
稍微翻下源码,能够发现比较符合预期的一些效果
总体看源码来说,还是一贯的做法,将原生底层一些方法封装出来,提供给RN端使用。
看下Android的核心实现 VibrateFactory.java

在这里插入图片描述

看下IOS的核心实现 RNHapticFeedback.mm

在这里插入图片描述

最终确定使用【react-native-haptic-feedback】来实现触摸反馈效果。

三、实际应用

接下来,我们添加到我们的项目中体验下实际的效果,如果目前手上没有实际的项目,我们快速通过模版创建一个全新的项目验证。

npx react-native@latest init AwesomeProjectTest

项目创建结束后,按照react-native-haptic-feedback指导添加到项目中,执行

cd AwesomeProjectTest
npm install react-native-haptic-feedback --save

然后添加trigger事件到演示代码中,运行项目,点击按钮就能得到对应的反馈。

import ReactNativeHapticFeedback from "react-native-haptic-feedback";
const options = {
  enableVibrateFallback: true,
  ignoreAndroidSystemSettings: false,
};
ReactNativeHapticFeedback.trigger("impactLight", options);

or

import { trigger } from "react-native-haptic-feedback";
const options = {
  enableVibrateFallback: true,
  ignoreAndroidSystemSettings: false,
};
trigger("impactLight", options);

引入实际项目中使用:

import React from 'react';
import { trigger } from "react-native-haptic-feedback";
import {
  SafeAreaView,
  ScrollView,
  Text,
  TouchableOpacity,
  View,
} from 'react-native';

const options = {
  enableVibrateFallback: true,
  ignoreAndroidSystemSettings: true,
};
function App(): JSX.Element {
  return (
    <SafeAreaView>
      <ScrollView>
        <View>
          <TouchableOpacity onPress={() => {
            trigger("impactHeavy", options);
          }}>
            <View style={{
              backgroundColor: '#fafafa',
              width: 300,
              height: 200,
              justifyContent: 'center',
              alignItems: 'center'
            }}>
              <Text>触发震动反馈</Text>
            </View>
          </TouchableOpacity>
        </View>
      </ScrollView>
    </SafeAreaView>
  );
}
export default App;

trigger 包含两个参数。分别是反馈类型和该次反馈的配置项。

反馈类型包含:
impactLight、impactMedium 、impactHeavy、rigid 、soft、notificationSuccess、notificationWarning 、notificationError、selection、clockTick、contextClick 、keyboardPress、keyboardRelease、keyboardTap、longPress、textHandleMove、virtualKey、virtualKeyRelease、effectClick、effectDoubleClick、effectHeavyClick、effectTick。可分别配置尝试效果。
反馈配置项包含:

  • enableVibrateFallback 仅限 iOS。如果触觉反馈不可用(iOS < 10 或设备 < iPhone6s),则使用默认方法振动(重 1 秒)(默认值: false)
  • ignoreAndroidSystemSettings 仅限安卓。如果 Android 系统设置中禁用了触觉,这将允许忽略该设置并触发触觉反馈。

使用效果还是符合我们产品需求的,最终使用了impactHeavy类型。


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小游戏个人开发者上架:从注册到上线的详细步骤

微信小游戏个人开发者上架&#xff1a;从注册到上线的详细步骤 一&#xff0c;注册小程序账号1.1 微信公众平台1.2 填写信息1.3 绑定管理 二&#xff0c;打包步骤2.1 工具准备2.2 关于Unity版本2.3 打包详解 三&#xff0c;提包步骤3.1 填写用户隐私3.2 完善开发者自查3.3 游戏…

《向量数据库指南》:向量数据库Pinecone使用命名空间

目录 创建命名空间 创建多个命名空间 跨所有命名空间的操作 Pinecone允许您将索引中的向量划分为命名空间。然后,查询和其他操作仅限于一个命名空间,因此不同的请求可以搜索索引的不同子集。 例如,您可能想为按内容索引的文章定义一个命名空间,为按标题索引的文章定义另…

内存条的故障修复方法分享

你知道电脑的内存条遇到故障要怎么修复吗&#xff1f;可能很多小伙伴都是直接说&#xff1a;“找电脑维修师傅就好。”那当只有你自己的时候怎么办呢&#xff1f;今天我就跟你分享几个电脑常见的故障以及修复的方法吧。 1、开机无显示。此类故障通常是由于内存条与主板内存插槽…

kernel-pwn之ret2dir利用技巧

前言 ret2dir是2014年在USENIX发表的一篇论文&#xff0c;该论文提出针对ret2usr提出的SMEP、SMAP等保护的绕过。全称为return-to-direct-mapped memory&#xff0c;返回直接映射的内存。论文地址&#xff1a;https://www.usenix.org/system/files/conference/usenixsecurity1…

如何在电脑上查看连接过的wifi信息?

忘记wifi密码&#xff1f;想要看看wifi信息&#xff1f; 我想这篇文章可以帮到你O(∩_∩)O哈哈~。 通过网络连接中心查看 电脑上找到“网络和共享中心” 点击连接的wifi名称 点击无线属性 在安全选项中就有密码 通过电脑命令行工具查看推荐 通过winr快捷键打开电脑运…

vue echarts实现月度年度可切换,自适应的柱状统计图功能

echarts配置文档参考&#xff1a;Documentation - Apache ECharts 功能&#xff1a;可进行月度、年度切换显示相应的收入和支出柱状图数据&#xff1b; 这里进行了柱状图的简化配置&#xff0c;X轴Y轴都有所改写&#xff0c;具体的简化配置下文会贴出代码&#xff0c;参照功能开…

LiveGBS流媒体平台GB/T28181功能-支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放

LiveGBS支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放 1、背景2、分屏展示3、选择轮播通道4、配置轮播间隔(秒)5、点击开始轮播6、轮播停止及全屏7、搭建GB28181视频直播平台 1、背景 视频监控项目使用过程中&#xff0c;有时需要大屏值守&#xff0c;值守的时候多分…

(学习笔记-IP)Ping的工作原理

Ping是基于ICMP协议工作的&#xff0c;ICMP报文封装在IP包里面&#xff0c;它工作在网络层&#xff0c;是IP协议的助手。 ICMP包头的类型字段&#xff0c;大致可分为两大类&#xff1a; 一类是用于诊断的查询消息&#xff0c;也就是查询报文类型一类是通知出错原因的错误消息&…

PDF添加水印以及防止被删除、防止编辑与打印

方法记录如下&#xff1a; 1、添加水印&#xff1b; 2、打印输出成一个新的pdf&#xff1b; 3、将pdf页面输出成一张张的图片&#xff1a;&#xff08;福昕pdf操作步骤如下&#xff09; 4、将图片组装成一个新的pdf&#xff1a;&#xff08;福昕pdf操作步骤如下&#xff09;…

C# 使用opencv从图片识别人脸示例

1.用chatgpt帮我写了一个示例 using System; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure;class Program {static void Main(string[] args){// 加载人脸分类器CascadeClassifier faceCascade new CascadeClassifier("haarcascade_frontalface_defau…

Kafka基础架构与核心概念

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者&#xff0c;性能特点主要是…

测试人必看:五大维度解读软件测试分类

软件测试方法种类繁多&#xff0c;记忆起来也非常混乱&#xff0c; 如果把软件测试方法进行多个维度的分类, 就会清晰很多。 软件测试的分类-按开发阶段分类 单元测试 又称模块测试&#xff0c;针对软件设计中的最小单位-程序模块&#xff0c;进行正确性检查的测试工作。单元…

谷粒商城第五天-将项目改为基于若依框架实现、使用若依进行代码生成(生成MyBatisPlus风格)

目录 一、使用若依框架来搭建后台管理系统 1.1 前端部分 1.2 后端部分 1.2.1 将若依框架植入到项目中 1.2.2 完成数据库配置 二、使用若依框架的逆向生成工具逆向生成代码&#xff08;同时将代码风格改为MyBatisPlus&#xff09; 2.1 使用若依框架提供的逆向生成工具生成…

思科路由器交换机密码破解教程

1. 路由器密码的恢复. 2600、3600等新系列路由器步骤&#xff1a; 1、启动路由器&#xff0c;60秒内按下ctrlbreak键2、rommon>confreg 0x21423、rommon>reset4、router#copy startup-config running-config5、router(config)#no enable secrect //可以删除密码也可以更…

linux升级mysql

linux升级mysql 一.介绍二.下载三.文件配置1.查找删除mysql2.解压配置 四.修改配置五.初始化mysql服务六.启动mysql七.配置数据库七.测试 一.介绍 由于最近业务需要&#xff0c;不得不将之前的mysql5.7.26升级到mysql8.0加了 Linux安装mysql&#xff08;5.7.26&#xff09;&…

浅谈SSM框架理论相关知识_kaic

一、SSM框架简介 SSM框架是Spring MVC &#xff0c;Spring和Mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为View层&#xff0c;Controller层&#xff0c;Service层&#xff0c;DAO层四层&#xff0c;使用Spring MVC负责请求的转发和视图管理&…

项目管理:甘特图制定项目计划,提高项目管理效率

项目实施周期长&#xff0c;工作范围广&#xff0c;不确定因素多&#xff0c;因此项目管理具有巨大的挑战性。 项目经理需要具备专业的知识能力和个人应变能力&#xff0c;以管理整个项目的实施过程&#xff0c;提高项目实施的成功率和管理效率。 现在&#xff0c;随着社会市…

opencv-16 图像去水印示例

常用的去水印方法&#xff1a; 克隆修复工具&#xff1a;使用图像处理软件&#xff08;如Photoshop&#xff09;中的克隆修复工具可以选择一个样本区域&#xff0c;然后将其复制到水印区域&#xff0c;以覆盖水印。这种方法在简单的水印上可能效果不错&#xff0c;但复杂的水印…

CMU 15-445 -- Concurrency Control Theory - 13

CMU 15-445 -- Concurrency Control Theory - 13 引言TransactionsStrawman/Simple SystemFormal DefinitionsAtomicityLoggingShadow Paging ConsistencyIsolationConflicting OperationsDependency Graphs&#xff08;依赖图&#xff09;VIEW SERIALIZABILITY(视图可串行化) …

配置SQL提示

问题描述 SpringBoot工程中&#xff1a;使用Select注入的时候没有提示 例如&#xff1a; 在正常情况下&#xff1a; 在没有配置SQL提示的时候&#xff1a; 原因分析&#xff1a; 没有进行SQL配置 解决方案&#xff1a; 选中Select注入中的SQL语句&#xff0c;使用IDEA中的快…