HTML5 手机摇一摇实现

目录结构

引入jQuery:jquery-1.11.1.min.js

html代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>摇一摇功能</title>

<script type="text/javascript" src="jquery-1.11.1.min.js"></script>

<script type="text/javascript" src="shake.js"></script>

<script type="text/javascript">

var count = 1;

window.onload = function() {

var myShakeEvent = new Shake({

threshold: 15

});

myShakeEvent.start();

window.addEventListener(‘shake‘, shakeEventDidOccur, false);

function shakeEventDidOccur () {

shakingAutoPlay();

$("#shakeMe").text("第"+count+"次摇晃手机");

count++;

window.setTimeout(shakeoverAutoPlay,1500);

}

};

//摇动时的声音

function shakingAutoPlay(){

var shaking = document.getElementById("shaking");//必须使用 document.getElementById 获取dom而非jQuery对象

shaking.loop = false;//必须设置为false   不然在android手机4.0版本上会一直循环播放该音效

shaking.play();

}

//摇动结束后的声音

function shakeoverAutoPlay(){

var shakeover = document.getElementById("shakeover");

shakeover.loop = false;

shakeover.play();

}

</script>

</head>

<body>

<div id="pro">

<p>使劲晃动您的手机</p>

<h1 id="shakeMe">尚未摇动</h1>

<audio id="shaking" src="shaking.mp3" controls="controls" loop="false" hidden="true"></audio>

<audio id="shakeover" src="shakeover.mp3" controls="controls" loop="false" hidden="true"></audio>

</div>

</body>

</html>

shake.js

/*

* Author: Alex Gibson

* https://github.com/alexgibson/shake.js

* License: MIT license

*/

(function(global, factory) {

if (typeof define === ‘function‘ && define.amd) {

define(function() {

return factory(global, global.document);

});

} else if (typeof module !== ‘undefined‘ && module.exports) {

module.exports = factory(global, global.document);

} else {

global.Shake = factory(global, global.document);

}

} (typeof window !== ‘undefined‘ ? window : this, function (window, document) {

‘use strict‘;

function Shake(options) {

//feature detect

this.hasDeviceMotion = ‘ondevicemotion‘ in window;

this.options = {

threshold: 15, //default velocity threshold for shake to register

timeout: 1000 //default interval between events

};

if (typeof options === ‘object‘) {

for (var i in options) {

if (options.hasOwnProperty(i)) {

this.options[i] = options[i];

}

}

}

//use date to prevent multiple shakes firing

this.lastTime = new Date();

//accelerometer values

this.lastX = null;

this.lastY = null;

this.lastZ = null;

//create custom event

if (typeof document.CustomEvent === ‘function‘) {

this.event = new document.CustomEvent(‘shake‘, {

bubbles: true,

cancelable: true

});

} else if (typeof document.createEvent === ‘function‘) {

this.event = document.createEvent(‘Event‘);

this.event.initEvent(‘shake‘, true, true);

} else {

return false;

}

}

//reset timer values

Shake.prototype.reset = function () {

this.lastTime = new Date();

this.lastX = null;

this.lastY = null;

this.lastZ = null;

};

//start listening for devicemotion

Shake.prototype.start = function () {

this.reset();

if (this.hasDeviceMotion) {

window.addEventListener(‘devicemotion‘, this, false);

}

};

//stop listening for devicemotion

Shake.prototype.stop = function () {

if (this.hasDeviceMotion) {

window.removeEventListener(‘devicemotion‘, this, false);

}

this.reset();

};

//calculates if shake did occur

Shake.prototype.devicemotion = function (e) {

var current = e.accelerationIncludingGravity;

var currentTime;

var timeDifference;

var deltaX = 0;

var deltaY = 0;

var deltaZ = 0;

if ((this.lastX === null) && (this.lastY === null) && (this.lastZ === null)) {

this.lastX = current.x;

this.lastY = current.y;

this.lastZ = current.z;

return;

}

deltaX = Math.abs(this.lastX - current.x);

deltaY = Math.abs(this.lastY - current.y);

deltaZ = Math.abs(this.lastZ - current.z);

if (((deltaX > this.options.threshold) && (deltaY > this.options.threshold)) || ((deltaX > this.options.threshold) && (deltaZ > this.options.threshold)) || ((deltaY > this.options.threshold) && (deltaZ > this.options.threshold))) {

//calculate time in milliseconds since last shake registered

currentTime = new Date();

timeDifference = currentTime.getTime() - this.lastTime.getTime();

if (timeDifference > this.options.timeout) {

window.dispatchEvent(this.event);

this.lastTime = new Date();

}

}

this.lastX = current.x;

this.lastY = current.y;

this.lastZ = current.z;

};

//event handler

Shake.prototype.handleEvent = function (e) {

if (typeof (this[e.type]) === ‘function‘) {

return this[e.type](e);

}

};

return Shake;

}));

demo地址:http://files.cnblogs.com/files/avivaye/shake.zip

时间: 2024-10-10 14:00:00

HTML5 手机摇一摇实现的相关文章

HTML5手机重力与方向感应的应用——摇一摇效果

http://www.helloweba.com/view-blog-287.html HTML5有一个重要特性:DeviceOrientation,它将底层的方向和运动传感器进行了高级封装,它使我们能够很容易的实现重力感应.指南针等有趣的功能.本文将结合实例给大家介绍使用HTML5的重力运动和方向传感器实现手机摇一摇效果. DeviceOrientation包括两个事件: 1.deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度.方

利用html5实现类似微信的手机摇一摇功能

利用html5实现类似微信的手机摇一摇功能,并播放音乐. 1.  deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度.方位.朝向等. 2.  deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据. 不多说直接上代码, Javascript: [javascript] view plaincopy var SHAKE_THRESHOLD = 3000; var last_update = 0;

HTML5实现手机摇一摇的功能

利用html5实现类似微信的手机摇一摇功能,并播放音乐. 1.  deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度.方位.朝向等. 2.  deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据. js如下: <scirpt> var SHAKE_THRESHOLD = 3000; var last_update = 0; var x = y = z = last_x = last_y =

利用html5实现类似微信的手机摇一摇功能,并播放音乐,并且解决中文乱码的问题。

转载了@三井学长:http://blog.csdn.net/david1030/article/details/8229008 转载了@Hello Csn楠!:http://www.cnblogs.com/csn0721/ 1.  deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度.方位.朝向等. 2.  deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据. 不多说直接上代码, Javas

HTML5 实现手机摇一摇

HTML5新增了一些JavaScript API接口,比如地理定位.重力感应等.今天主要介绍devicemotion事件(设备事件),它提供设备的加速信息,表示为定义在设备上的坐标系.其还提供了设备在坐标系中的自转速率.若可行的话,事件应该提供设备重心处的加速信息.本文给大家讲解了HTML5实现手机摇一摇的效果. 手机摇一摇的实现思路: 1.检测设备是否支持重力传感: 1 // 监听运动传感事件,查看是否支持硬件运动 2 3 if (window.DeviceMotionEvent) { 4 5

利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖

摇一摇JS脚本逻辑:接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的devicemotion事件,获取设备在位置和方向上的改变速度的相关信息,该事件的基本使用如下: if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', handler, !1); lastTime = new Date(); } else { alert('你的浏览器不支持摇一摇功能.'); } devicemotion

手机摇一摇效果-html5

1.手机摇一摇效果实现 2.播放声音 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>摇一摇功能</title

html5 DeviceOrientation来实现手机网站上的摇一摇功能

原文地址:http://www.cootm.com/?p=706 从网上转载看到的,感觉不错,就转过来了,特此感谢 cnblogs 的 幸福2胖纸的码农生活,直接转载了,不要介意!呵呵 以下是转载内容. ——————————————————— 介绍之前做两个声明: 1.以下代码可以直接运行,当然你别忘了引用jQuery才行,我可提醒了,别到时候跑不起来骂我就成: 2.下面的实现思想参照了网上的一些文章,自己做了以下整理,对代码加入了一些注释说明,本人并非原创. 1 <html lang="

html5 实现手机摇一摇功能(C)

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>简易模拟微信摇一摇</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-