首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js摇一摇抽奖代码

以下是一个使用JavaScript实现简单摇一摇抽奖功能的示例代码:

一、基础概念

  1. 事件监听
    • 在JavaScript中,通过监听设备的加速度传感器(devicemotion事件)来检测设备的摇晃动作。这个事件会在设备运动状态改变时触发,包含有关设备加速度的信息。
  • 阈值判断
    • 为了确定是否是有效的“摇一摇”动作,需要设定一个阈值。当设备在短时间内(例如一定时间窗口内)的加速度变化超过这个阈值时,就认为是发生了摇晃动作。

二、代码示例

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF - 8">
    <meta name="viewport" content="width=device-width, initial - scale = 1.0">
    <title>摇一摇抽奖</title>
    <style>
        #result {
            font - size: 24px;
            margin - top: 20px;
        }
    </style>
</head>

<body>
    <h1>摇一摇抽奖</h1>
    <div id="result">摇一摇开始</div>

    <script>
        let lastX = 0;
        let lastY = 0;
        let lastZ = 0;
        let shakeThreshold = 15;
        let shakeCount = 0;
        let lastShakeTime = 0;
        const resultDiv = document.getElementById('result');

        window.addEventListener('devicemotion', function (event) {
            const acceleration = event.accelerationIncludingGravity;
            const curX = acceleration.x;
            const curY = acceleration.y;
            const curZ = acceleration.z;

            if (Math.abs(curX - lastX) > shakeThreshold || Math.abs(curY - lastY) > shakeThreshold ||
                Math.abs(curZ - lastZ) > shakeThreshold) {
                const currentTime = new Date().getTime();
                if (currentTime - lastShakeTime > 300) {
                    shakeCount++;
                    lastShakeTime = currentTime;
                }
            }

            lastX = curX;
            lastY = curY;
            lastZ = curZ;

            if (shakeCount >= 3) {
                // 这里可以添加抽奖逻辑,例如随机抽取一个奖品
                const prizes = ['一等奖', '二等奖', '三等奖', '谢谢参与'];
                const randomIndex = Math.floor(Math.random() * prizes.length);
                resultDiv.innerText = '恭喜你获得:' + prizes[randomIndex];
                shakeCount = 0;
            }
        });
    </script>
</body>

</html>

三、优势

  1. 交互性强
    • 摇一摇抽奖提供了一种新颖、有趣的交互方式,相比于传统的点击抽奖更能吸引用户的注意力,提高用户参与度。
  • 设备适配性较好
    • 利用设备的传感器(加速度传感器),几乎可以在所有支持该传感器的移动设备(如智能手机和平板电脑)上运行。

四、应用场景

  1. 营销活动
    • 商家可以在促销活动中使用摇一摇抽奖来吸引顾客,例如在商场促销、电商平台的节日活动等场景下。
  • 游戏内活动
    • 在移动游戏中,摇一摇抽奖可以作为游戏内的一个特殊活动环节,例如抽取游戏道具、角色皮肤等。

五、可能遇到的问题及解决方法

  1. 兼容性问题
    • 部分旧设备或者非主流浏览器可能不支持devicemotion事件。
    • 解决方法:在使用摇一摇功能之前,可以先检测浏览器是否支持该事件。如果不支持,可以提供一个替代方案,如提示用户在支持的设备和浏览器上使用。
    • 解决方法:在使用摇一摇功能之前,可以先检测浏览器是否支持该事件。如果不支持,可以提供一个替代方案,如提示用户在支持的设备和浏览器上使用。
  • 误判问题
    • 有时候设备的一些正常晃动(如走路时的晃动)可能会被误判为摇一摇动作。
    • 解决方法:通过调整阈值(shakeThreshold)和时间间隔(300毫秒这里)来减少误判。同时,可以增加更多的判断条件,例如要求在一定时间内摇晃的次数达到一定数量(这里是3次)。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 第一个摇一摇小程序?在Nodes里摇一摇

    话说,小程序也能做摇一摇功能,但好像没怎么看到过有什么小程序做了这个?(大家如果看到,可以留言推荐一下),按耐不住心中好奇心的花叔这两天研究了一下。...在说这之前,请允许我描述一下Nodes的新功能,因为由于这功能,花叔才萌生了研究小程序摇一摇的好奇心。 最近给Nodes加了个人首页”的功能,大致的功能点如下: ?...没错,演示的页面就是上面访问的那个页面,只要在那个页面进行摇一摇,就会随机出现其他用户的主页。...这里用了微信小程序的两个API: 加速度计API,用来模拟摇一摇的 音频api,用来播放音频的 代码怎么写?...因为小程序里的加速度计Accelerometer API跟网页的很像,唯一不一样的是小程序中需要主动开启这个事件的监听(也可以关闭),所以在网上找一段现成的js代码改着用就好了。

    1.3K70

    摇一摇面包机

    用户不断摇,面包不断掉,而面包机不断生产面包,不断往上滚动补充面包。...此处也决定了面包从底到顶一共需要4s的时间) 最终得到的效果是这样的: 但是这里存在着一个问题,我们希望动画一开始时候层板就布满面包机,而不希望要等个3秒钟才铺满,于是巧妙地利用到了动画延时可以支持负数的特性,改了一下代码如下...所以我们需要解决一个问题,要让即将掉落的面包出现在对应时刻隐藏的面包的位置上,而由于循环滚动是用css写的,我们无法通过js很好地算出来即将掉落面包的位置坐标,于是我们只能利用 offset() 实时获取该面包相对于文档的位置来决定...,层板上就会存在着隐藏的面包,我们希望层板在完成当次动画循环时,即在下一次动画重新开始的时候,把面包补充上(即把隐藏的重新展示),但是非常遗憾的是,css3的动画并不存在完成后执行回调的说法(css与js...和 .eq() 选择器,而且随着面包不断的掉落,是大量的使用,所以其实也存在性能优化空间,最后最后的方案是换成ID选择器: 2)兼容性问题 众所周知,部分史前手机 不支持陀螺仪的,而本项目的核心 摇一摇

    1.6K10

    微信春晚摇一摇项目经验学习(研发流程篇)

    [关键词一:不断演习和优化,弱化需求变更概念] 从1月中旬,当春晚摇一摇的大部分功能初步完成开发的时候,开发侧就发起了演习。每周四晚上8点到凌晨12点半,模拟春晚当晚的实际情况进行内部的体验和测试。...整个春晚摇一摇项目,基本上视觉稿或者交互稿给到老大都能大方向通过。所以春晚的项目后期紧张的时候,有些不是很大的方案,都是先开发,再同步给老大汇报,因为老大的时间毕竟难约。...在春晚摇一摇项目中,没有一个专门的项目经理的角色。项目经理都是产品经理或者开发在必要的时刻才兼任的。一开始的项目经理由产品承担,组织好相关部门来涉及和开发相应的产品。

    1.1K70

    iOS后台锁屏监听摇一摇

    然而,并没有完整的代码或 demo 。顿时,Talk is cheap, show me the code!这句经典台词突然地出现在脑海中!...也看到有人评论说 CoreMotion 的确可以实现跟系统摇一摇类似的效果,但是退到后台或锁屏后,没办法监听到摇一摇事件。 看到这条评论时,我不禁开始怀疑此功能是否真的可以被实现。...= nil; self.gDateLastShakeSuc = nil; } 控制器相关逻辑和代码 开始监听摇一摇 BOOL lRes = [[MYAccelerometerTool sharedMYAccelerometerTool...后台定位权限 + 系统摇一摇,是否可行? 经测试,还是不行。果然,系统摇一摇还是比较受限的,只能在前台回调。...此外,多 APP 都实现此功能时,摇一摇的效果是:只要摇动力度很大,加速计数据满足 APP 实现的摇一摇判定条件,就可以同时触发多个 APP 各自对应的效果。

    1.3K20

    微信升级摇一摇,进入变现深水区

    从微信最近一些动作来看,2015年微信将围绕公众账号、摇一摇大做文章,最终目的则是让微信丰厚的流量得到变现机会,可以揣测,2015年微信将大力变现,努力成为腾讯新的现金牛。...微信摇一摇升级:可以摇到附近的商户 继公众平台支持评论之后,据腾讯内部人士爆料,微信最近又将迎来大版本,其中一个亮点便是可以搜索附近的商户,除了文字搜索之外,还可通过摇一摇搜索周边商户。...笔者了解到目前微信已与分众传媒战略合作,依靠分众全面部署iBeacon网络,支持微信摇一摇功能,用户只要在电梯口的分众广告电视前,可以通过摇一摇获取附近商户的大礼包。...摇一摇、微信红包和附近的人,这几个功能被糅合到一起,构建新的O2O营销模式。这个小功能,对于一向抵制营销的微信而言,是一个巨大的改变,并且只是微信O2O营销版图中的冰山一角。...搜索附近的商户、摇一摇附近的商户、与分众这类线下O2O广告营销平台合作,无异于给商户们打开一道新的流量入口。毫无疑问的是,这些流量对于商户而言依然需要付出成本,最终或许会成为微信营销广告平台的一部分。

    1.7K70

    微信春晚摇一摇项目经验总结(产品篇)

    这也是摇电视前期积攒的经验,只要是电视台的互动有抽奖或者红包,互动量就会更好。...但是,假如春晚摇一摇只停留在“抢红包”,那么这场微信上的“春晚”就会像是只有某山表演的小品却没有其他歌舞等节目。...[关键词四:把握火候] 摇一摇已有两个功能:摇人和摇歌曲。以往的摇电视借用的是摇歌曲的入口,但因为春晚这个特殊的全民事件。摇人和摇歌曲都取消掉,变成唯一的入口,摇春晚。...但红包之于电视场景,只是一种互动方式,微信通过春晚摇一摇,让用户知道电视也可以这么玩,后续看电视都可以有新玩意产生。...春晚也是一个非常好的连接二三四路线城市的舞台,通过了春晚摇一摇,大叔大妈一夜之间学会了摇一摇,学会了绑定银行卡。而春晚过后这一风潮会让玩的人带动他们的亲人朋友,带来更广大的连接。

    2.3K80

    传感器实现仿微信摇一摇功能

    1摇一摇效果图 效果如下:界面有点丑,勿吐槽哈~关键是后面我们如何去实现这功能。 ?...3如何使用传感器 因为本文是为了实现一个仿微信摇一摇的功能,而实现这个功能用到的是加速度传感器。所以我们就以加速度传感器来讲解具体的实现过程。...SensorManager.SENSOR_DELAY_GAME);//注册 3、最后记得接触注册传感器 sensorManager.unregisterListener(accListener);//解除注册 4微信摇一摇核心代码...作为程序员,直接上微信摇一摇的核心代码,相信可以更直接了当的介绍传感器的具体用法,程序中重点的语句,我也已经注释在代码后面。...@Override public void onSensorChanged(SensorEvent event) { //判断条件成功后,执行摇一摇的效果

    1.5K20

    iOS后台锁屏监听摇一摇

    然而,并没有完整的代码或 demo 。顿时,Talk is cheap, show me the code!这句经典台词突然地出现在脑海中!...也看到有人评论说 CoreMotion 的确可以实现跟系统摇一摇类似的效果,但是退到后台或锁屏后,没办法监听到摇一摇事件。 看到这条评论时,我不禁开始怀疑此功能是否真的可以被实现。...= nil; self.gDateLastShakeSuc = nil; } 控制器相关逻辑和代码 开始监听摇一摇 BOOL lRes = [MYAccelerometerTool sharedMYAccelerometerTool...多 APP 都实现此功能时,摇一摇是何效果 这里用 demo APP 和酷狗音乐 APP 进行测试。 同时打开这两个 APP,其中酷狗音乐 APP 打开后台摇一摇切歌的功能。...此外,多 APP 都实现此功能时,摇一摇的效果是:只要摇动力度产生的数据满足某个 APP 实现的摇一摇判定条件,就可以同时触发多个 APP 各自对应的效果。

    3.1K175162
    领券