uniapp 震动功能实现

项目场景:

提示:这里简述项目相关背景:

在项目中有时候需要一些功能,比如震动


描述

提示:这里描述项目中遇到的问题:

移动应用中,震动反馈是提升用户体验的重要方式。uniapp 提供了两种震动方式:

  • 短震动:轻微的触感反馈
  • 长震动:较强的震动反馈

分析:

提示:这里填写问题的分析:

1. 短震动 (uni.vibrateShort)

  • 作用:触发较短时间的震动
  • 震动时长:约 15ms
  • 适用场景:按钮点击、操作反馈等轻量级交互
javascript 复制代码
uni.vibrateShort(options: UniNamespace.VibrateShortOptions)

参数说明:

javascript 复制代码
interface VibrateShortOptions {
  success?: () => void  // 接口调用成功的回调函数
  fail?: (err: any) => void  // 接口调用失败的回调函数
  complete?: () => void  // 接口调用结束的回调函数(调用成功、失败都会执行)
}

2. 长震动 (uni.vibrateLong)

  • 作用:触发较长时间的震动
  • 震动时长:约 400ms
  • 适用场景:游戏结束、重要提示等需要明显震动反馈的场合
javascript 复制代码
uni.vibrateLong(options: UniNamespace.VibrateLongOptions)

参数说明:

javascript 复制代码
interface VibrateLongOptions {
  success?: () => void  // 接口调用成功的回调函数
  fail?: (err: any) => void  // 接口调用失败的回调函数
  complete?: () => void  // 接口调用结束的回调函数(调用成功、失败都会执行)
}

3:平台差异说明

| API | App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 |

|-----|-----|----| ---------- | ------------ | ---------- |

| vibrateShort | √ | x | √ | √ | √ |

| vibrateLong | √ | x | √ | √ | √ |

4:注意事项

权限要求:

  • App 平台需要在 manifest.json 中配置 vibrate 权限
  • 部分平台可能需要用户授权
  • 使用场景:
  • 短震动适合用于轻量级的交互反馈
  • 长震动建议用于重要提示,避免过度使用影响用户体验
  • 兼容性处理:
  • 建议添加错误处理逻辑
  • 在不支持的平台上需要提供替代方案

实例方案:

提示:这里填写该问题的具体解决方案:

1. 创建震动工具函数

useVibrate.ts 文件

javascript 复制代码
/**
 * 震动工具函数
 */
export function useVibrate() {
  // 短震动
  const vibrateShort = () => {
    uni.vibrateShort({
      success: () => {
        console.log('短震动成功')
      },
      fail: (err) => {
        console.error('短震动失败:', err)
      }
    })
  }
 
  // 长震动
  const vibrateLong = () => {
    uni.vibrateLong({
      success: () => {
        console.log('长震动成功')
      },
      fail: (err) => {
        console.error('长震动失败:', err)
      }
    })
  }
 
  return {
    vibrateShort,
    vibrateLong
  }
}

2:页面中使用

javascript 复制代码
<template>
  <view class="container">
    <button @click="handleShortVibrate">短震动</button>
    <button @click="handleLongVibrate">长震动</button>
  </view>
</template>
 
<script setup lang="ts">
import { useVibrate } from '@/composables/useVibrate'
 
const { vibrateShort, vibrateLong } = useVibrate()
 
const handleShortVibrate = () => {
  vibrateShort()
}
 
const handleLongVibrate = () => {
  vibrateLong()
}
</script>
相关推荐
Rysxt_1 天前
UniApp五大UI框架与uni-ui核心区别对比
uni-app·uni-ui
2501_915918411 天前
HTTPS 代理失效,启用双向认证(mTLS)的 iOS 应用网络怎么抓包调试
android·网络·ios·小程序·https·uni-app·iphone
2501_915106321 天前
混合应用(Hybrid)安全加固,不依赖源码对成品 IPA 混淆
android·安全·小程序·https·uni-app·iphone·webview
00后程序员张1 天前
无需越狱,来对 iOS 设备进行调试、管理与分析
android·ios·小程序·https·uni-app·iphone·webview
芒果大胖砸1 天前
uniapp当中如何实现长按复制功能并且能够自由选择内容
开发语言·javascript·uni-app
00后程序员张1 天前
在 iOS 上架中如何批量方便快捷管理 Bundle ID
android·ios·小程序·https·uni-app·iphone·webview
换日线°1 天前
uni-app对接腾讯即时通讯 IM
前端·uni-app
咚咚?1 天前
uniapp [JS Framework] 当前运行的基座不包含原生插件[xxxx],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座
开发语言·javascript·uni-app
木子啊1 天前
Uni-app生命周期:执行顺序与避坑指南
前端·javascript·uni-app
快起来搬砖了1 天前
UniApp 全端兼容 OSS 视频上传实现方案
小程序·uni-app·app·h5·文件上传·oss文件上传