GithubHelp home page GithubHelp logo

zbage / game-shake Goto Github PK

View Code? Open in Web Editor NEW

This project forked from coolfishstudio/game-shake

0.0 2.0 0.0 193 KB

JS 模拟微信摇一摇 [完成]

Home Page: http://shake.coolfishstudio.com/

JavaScript 14.75% HTML 85.25%

game-shake's Introduction

game-shake

JS 模拟微信摇一摇 #摇一摇案例教程 2015年的春节,微信借着春晚通过摇一摇抢红包,再一次的走近大家的眼中,创出一个全名抢红包的事情,不知道大家是否都抢到红包了没,别急,让我们自己写一个页面来再一次的过一把瘾吧。 所谓抢红包,其实就是微信的摇一摇,不得不说,这个摇一摇的动作在其他的应用里面真的是很少被使用,那么我们如何通过js来实现呢? 在html5中,有个属性可以来获取设备的运动传感器的时间、状态、加速度等数据,常见的数据就是来自于设备的陀螺仪、加速计、罗盘。 其中,deviceorientation事件,提供了设备的物理方向信息;devicemotion事件,提供了设备的加速度。 很明显,通过这两个事件,我们能做摇一摇、重力感应、指南针等应用。 ###下面让我们开始制作摇一摇的旅程吧。

####第一步,首先来判断一下,当前这个设备是否支持运动传感事件。

if(window.DeviceMotionEvent){//判断设备是否支持运动传感事件。
        window.addEventListener('devicemotion', shake, false);//如果支持,那么就绑定shake方法到事件上
}else{
        alert('本设备不支持摇一摇功能’);//如果不支持,提示即可
}

####第二步,编写shake方法。 首先让我们分析一下,用户什么样子的操作才能算作使用摇一摇了呢? 1.用户摇动手机,是以一个方向为主的摇动。 2.用户摇动手机的时候,加速度肯定是有变化的。 3.设置一个阈值,判断用户单位时间内的运动状态,以避免将用户的正常行为当作触发摇一摇。

//首先定义一下,全局变量
var lastTime = 0;//此变量用来记录上次摇动的时间
var x = y = z = lastX = lastY = lastZ = 0;//此组变量分别记录对应x、y、z三轴的数值和上次的数值
var shakeSpeed = 800;//设置阈值
//编写摇一摇方法
function shake(){
        var acceleration = eventDate.accelerationIncludingGravity;//获取设备加速度信息
        var nowTime = new Date().getTime();//记录当前时间
        //如果这次摇的时间距离上次摇的时间有一定间隔 才执行
        if(nowTime - lastTime > 100){
                var diffTime = nowTime - lastTime;//记录时间段
                lastTime = nowTime;//记录本次摇动时间,为下次计算摇动时间做准备
                x = acceleration.x;//获取x轴数值,x轴为垂直于北轴,向东为正
                y = acceleration.y;//获取y轴数值,y轴向正北为正
                z = acceleration.z;//获取z轴数值,z轴垂直于地面,向上为正
                //计算 公式的意思是 单位时间内运动的路程,即为我们想要的速度
                var speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 10000;
                if(speed > shakeSpeed){//如果计算出来的速度超过了阈值,那么就算作用户成功摇一摇
                        //这里就是放置如果用户成功的摇一摇,将要触发的事件,例如提示摇到了谁,摇到了多少金币等等
                }
                lastX = x;//赋值,为下一次计算做准备
                lastY = y;//赋值,为下一次计算做准备
                lastZ = z;//赋值,为下一次计算做准备
        }
}

好了,核心的东西我们已经写完了,剩下的其实就是一些页面上的动画效果,当摇一摇被触发才执行的事件,这就要和你写的项目相关联了,这里就不一一写了。

附上本次实例地址:http://shake.coolfishstudio.com

game-shake's People

Contributors

coolfishstudio avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.