当前位置: 首页 > news >正文

Uniapp 中的 uni.vibrate 震动 API 使用指南

uni.vibrate 是 Uniapp 提供的设备震动 API,可以让移动设备产生振动反馈。这个 API 主要适用于移动端(App 和小程序),在 H5 环境下通常无效。

一、基本用法

1. 短震动(15ms)

uni.vibrateShort({success: function() {console.log('震动成功');},fail: function(err) {console.log('震动失败:', err);}
});

2. 长震动(400ms)

uni.vibrateLong({success: function() {console.log('震动成功');},fail: function(err) {console.log('震动失败:', err);}
});

二、兼容性写法

由于不同平台支持程度不同,推荐使用以下兼容写法:

function vibrate(duration) {// #ifdef APP-PLUS || MP-WEIXINif (duration === 'long') {uni.vibrateLong();} else {uni.vibrateShort();}// #endif// #ifdef H5console.log('H5环境不支持震动');// #endif
}

三、平台差异说明

平台支持情况
微信小程序支持 vibrateShortvibrateLong
App支持 vibrateShortvibrateLong
H5不支持
其他小程序部分支持(支付宝小程序支持,百度小程序部分支持,需实测)

四、实际应用场景

1. 按钮点击反馈

<template><button @click="handleButtonClick">点击我有震动反馈</button>
</template><script>
export default {methods: {handleButtonClick() {// 点击时产生短震动uni.vibrateShort();// 其他业务逻辑...}}
}
</script>

2. 重要操作确认

function confirmDelete() {// 先产生长震动提醒用户uni.vibrateLong();uni.showModal({title: '警告',content: '确定要删除吗?',success: function(res) {if (res.confirm) {// 执行删除操作}}});
}

3. 游戏中的震动反馈

// 游戏角色受到攻击
function characterHurt() {uni.vibrateShort();// 其他受伤逻辑...
}// 游戏胜利
function gameWin() {// 胜利时产生三次短震动for (let i = 0; i < 3; i++) {setTimeout(() => {uni.vibrateShort();}, i * 200);}
}

五、注意事项

  1. 用户权限

    • 在部分 Android 设备上可能需要振动权限
    • iOS 无需特殊权限
  2. 震动时长

    • vibrateShort 一般为15ms(微信小程序固定值)
    • vibrateLong 一般为400ms(微信小程序固定值)
    • App端可以通过原生插件实现自定义时长
  3. 频繁调用限制

    • 避免在短时间内频繁调用震动API
    • 部分Android设备对频繁震动有限制
  4. 用户体验

    • 震动反馈应当适度使用,过度使用会惹恼用户
    • 最好在设置中提供关闭震动的选项
  5. H5替代方案

    • 在H5环境中可以使用CSS动画模拟震动效果
    @keyframes shake {0% { transform: translateX(0); }25% { transform: translateX(-5px); }50% { transform: translateX(5px); }75% { transform: translateX(-5px); }100% { transform: translateX(0); }
    }.vibrate-effect {animation: shake 0.3s linear;
    }
    

六、扩展实现(App端自定义震动时长)

如果需要更灵活的震动控制(特别是App端),可以通过原生插件实现:

1. 创建原生插件

// Android原生代码
public class VibratePlugin implements UniPlugin {public static void vibrate(int duration) {Vibrator vibrator = (Vibrator) UniSDKInstance.getContext().getSystemService(Context.VIBRATOR_SERVICE);if (vibrator.hasVibrator()) {vibrator.vibrate(duration);}}// ...其他必要方法
}

2. 在Uniapp中调用

const vibratePlugin = uni.requireNativePlugin('Your-Vibrate-Plugin');function customVibrate(duration) {// #ifdef APP-PLUSvibratePlugin.vibrate(duration);// #endif// #ifndef APP-PLUSif (duration > 100) {uni.vibrateLong();} else {uni.vibrateShort();}// #endif
}

七、最佳实践建议

  1. 场景选择

    • 重要的用户操作反馈(如支付成功)
    • 错误提示(如登录失败)
    • 游戏中的特殊事件
  2. 适度使用

    • 不要在每个按钮点击时都震动
    • 重要的、不常发生的操作才使用震动
  3. 用户控制

    // 检查用户是否禁用了震动
    function shouldVibrate() {const settings = uni.getStorageSync('userSettings') || {};return settings.vibration !== false;
    }// 使用示例
    if (shouldVibrate()) {uni.vibrateShort();
    }
    
  4. 组合反馈

    • 震动可以配合声音、视觉变化一起使用
    function combinedFeedback() {uni.vibrateShort();uni.showToast({ title: '操作成功' });// 可以在这里播放提示音
    }
    

通过合理使用 uni.vibrate API,可以显著提升移动端应用的用户体验,特别是在游戏和交互密集型应用中。但切记要适度使用,避免过度振动导致用户体验下降。

http://www.dtcms.com/a/331658.html

相关文章:

  • 4. 索引数据的增删改查
  • ATAM:基于场景的软件架构权衡分析法
  • C语言指针使用
  • 机器翻译:Hugging Face库详解
  • Qwen-Image深度解析:突破文本渲染与图像编辑的视觉革命
  • 网站突然崩了,此站点遇到了致命错误!
  • 从零开始学习:深度学习(基础入门版)(第2天)
  • RCL 2025 | LLM采样机制的新视角:来自处方性偏移的解释
  • 区块链技术原理(10)-以太坊帐户
  • ​​vdbench 存储性能测试工具​​的详细使用教程,结合安装部署、参数配置、测试执行及结果分析
  • 电池模组奇异值分解降阶模型
  • Pandas数据处理与分析实战:Pandas数据转换与处理基础课程
  • 既然是长连接 ,资源已经占用,已经存在。那抢购就直接用长连接不更好?
  • 前端八股文-HTML5篇
  • AI绘画:从算法原理解读其风格、质量与效率变革
  • RLHF综述-GRPO之前
  • 《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》论文精读笔记
  • 机器学习算法篇(八)-------svm支持向量机
  • 机器人“ChatGPT 时刻”倒计时
  • 码上爬第九题【协程+webpack】
  • 苹果正计划大举进军人工智能硬件领域
  • 【wpf】WPF 中的 MouseBinding 详解
  • Node-RED系列教程-V4版本Dashboard2使用教程
  • 【科研绘图系列】R语言绘制微生物丰度和基因表达值的相关性网络图
  • 数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系
  • Java 中导出 Excel 文件的方法
  • Java 设计模式-装饰器模式
  • 基于51单片机万年历时钟设计
  • Auto-Coder的CLI 和 Python API
  • 顺序表插入删除