1.0.2 • Published 1 month ago

@tanzhenxing/zx-luckshake v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
1 month ago

zx-luckshake 摇一摇抽奖

zx-luckshake 是一个摇一摇抽奖组件,支持 H5、小程序、App 多端运行,可配置图片、摇晃设备回调等。

特性

  • 🎮 支持摇一摇抽奖功能
  • 📱 兼容 H5、小程序、App 多端
  • 🎨 支持自定义红包图片、尺寸等
  • ⚡ 流畅的摇晃动画效果
  • 🎯 支持点击和摇晃双重触发方式
  • 🔧 灵活的配置选项
  • 📳 支持震动反馈(仅限支持的平台)

注意事项

  • 监听设备的加速度变化等信息的 API devicemotion 的兼容性问题:
    • 在 iOS 10+ 之后,iOS 做了安全限制,如果想要在页面中使用陀螺仪相关的一些事件,必须使用 https 协议
    • 如果用户可以在手机的设置关闭掉"动作与方向访问",则设备不支持摇一摇功能
    • 调用手机震动的 API navigator.vibrate 只在安卓系统有效

使用方法

基础用法

<template>
  <view class="demo">
    <zx-luckshake
      ref="luckshake"
      :luck-width="luckWidth"
      :luck-height="luckHeight"
      @shake-event="shakeEvent"
      @click-shake="handleClick"
    >
    </zx-luckshake>
  </view>
</template>

<script setup>
import { ref } from 'vue'
import ZxLuckshake from '@/components/zx-luckshake/zx-luckshake.vue'

// 红包大小
const luckWidth = ref('200px')
const luckHeight = ref('160px')

// 剩余抽奖次数
const shakeNum = ref(3)

const shakeEvent = () => {
  if (shakeNum.value == 0) {
    console.log('无抽奖次数')
  } else if (shakeNum.value == 1) {
    setTimeout(() => {
      console.log('中奖啦')
    }, 200)
    shakeNum.value -= 1
  } else {
    setTimeout(() => {
      console.log(`抽奖次数还剩${shakeNum.value}次`)
    }, 200)
    shakeNum.value -= 1
  }
}

const handleClick = () => {
  console.log('点击摇一摇')
  if (shakeNum.value == 0) {
    console.log('无抽奖次数')
  } else if (shakeNum.value == 1) {
    setTimeout(() => {
      console.log('中奖啦')
    }, 200)
    shakeNum.value -= 1
  } else {
    setTimeout(() => {
      console.log(`抽奖次数还剩${shakeNum.value}次`)
    }, 200)
    shakeNum.value -= 1
  }
}
</script>

自定义红包图片

<template>
  <zx-luckshake
    luck-width="250px"
    luck-height="200px"
    luck-img-top="/static/images/redpacket-top.png"
    luck-img-bottom="/static/images/redpacket-bottom.png"
    @shake-event="onShake"
  >
  </zx-luckshake>
</template>

自定义手势图片

<template>
  <zx-luckshake
    click-point="/static/images/hand-gesture.png"
    :pointer-style="{
      width: '120px',
      height: '120px'
    }"
    @shake-event="onShake"
  >
  </zx-luckshake>
</template>

禁用手势提示

<template>
  <zx-luckshake
    :click-point="false"
    @shake-event="onShake"
  >
  </zx-luckshake>
</template>

调整摇晃灵敏度

<template>
  <zx-luckshake
    :shake-speed="80"
    :duration-animation="1500"
    @shake-event="onShake"
  >
  </zx-luckshake>
</template>

Props

字段说明类型默认值
is-shake当前环境是否支持摇一摇String/Booleantrue
luck-width红包图片的宽度String'200px'
luck-height红包图片的高度String'160px'
luck-img-top红包上半部分图片String''
luck-img-bottom红包下半部分图片String''
click-point点击手势图片,不需要可设置为 falseString/Boolean''
shake-speed摇手机的阈值,越小越灵敏Number110
duration-time震动持续时间,小程序不可设置此参数Number1000
duration-animation触发摇一摇后距离回调函数的时间Number1000
pointer-style点击图片的样式Object{width: '90px', height: '90px'}

Events

字段说明回调参数
shake-event摇晃设备的回调函数-
click-shake点击回调函数-

样式定制

组件提供了默认的红包和手势样式,你也可以通过传入自定义图片来替换:

默认红包样式

  • 红包采用渐变色设计,上半部分为浅红色,下半部分为深红色
  • 上半部分中央有金色圆形装饰
  • 支持圆角和阴影效果

默认手势样式

  • 使用 emoji 手势图标
  • 包含"摇一摇"文字提示
  • 支持弹跳动画效果

自定义样式

<template>
  <zx-luckshake
    luck-img-top="你的红包顶部图片路径"
    luck-img-bottom="你的红包底部图片路径"
    click-point="你的手势图片路径"
    :pointer-style="{
      width: '100px',
      height: '100px',
      borderRadius: '50%'
    }"
  >
  </zx-luckshake>
</template>

平台兼容性

平台摇一摇检测震动反馈说明
H5✅ (仅安卓)需要 HTTPS 协议,iOS 需要用户授权
小程序使用 uni.onAccelerometerChange
App原生支持

常见问题

Q: 在 H5 中摇一摇不生效?

A: 请确保: 1. 使用 HTTPS 协议访问 2. 在 iOS 设备上需要用户手动授权设备运动权限 3. 检查设备是否开启了"动作与方向访问"权限

Q: 如何调整摇晃灵敏度?

A: 通过 shake-speed 属性调整,数值越小越灵敏,建议范围 50-200

Q: 震动功能不工作?

A: 震动功能仅在安卓设备上有效,iOS 设备不支持网页震动

Q: 如何禁用摇一摇,只保留点击功能?

A: 设置 :is-shake="false" 即可禁用摇一摇检测

更新日志

v1.0.0

  • 初始版本发布
  • 支持摇一摇和点击双重触发
  • 支持多端兼容
  • 支持自定义图片和样式
  • 支持震动反馈
1.0.2

1 month ago

1.0.1

1 month ago