h5 android 重力 晃动,HTML5摇一摇(上)—如何判断设备摇动

2023-10-25 19:20

本文主要是介绍h5 android 重力 晃动,HTML5摇一摇(上)—如何判断设备摇动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

刚刚过去的一年里基于微信的H5营销可谓是十分火爆,通过转发朋友圈带来的病毒式传播效果相信大家都不太陌生吧,刚好最近农历新年将至,我就拿一个“摇签”的小例子来谈一谈HTML5中如何调用手机重力感应的接口

演示demo:“摇一摇,万福签”

什么是重力感应

说到重力感应有一个东西不得不提,那就是就是陀螺仪,陀螺仪就是内部有一个陀螺,陀螺仪一旦开始旋转,由于轮子的角动量,陀螺仪有抗拒方向改变的特性,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。

手机中的方位轴

1460000004853358

1460000004853360

1460000004853362

1460000004853364

在Web应用中调用手机陀螺仪接口

具体实现摇一摇可以通过HTML5中的DeviceOrientationEvent或者DeviceMotionEvent,二者的区别在于DeviceOrientation只是判断用户设备的偏转角度,而DeviceMotion则可以计算用户手机移动的加速度

//摇一摇(使用DeviceOrientation事件, 本质是计算偏转角)

if(window.DeviceOrientationEvent){

var lastAcc; // 用来存储上一次的deviceorientation事件

$(window).on('deviceorientation', function(event) {

var delA = Math.abs(event.alpha - lastAcc.alpha); // alpha轴偏转角

var delB = Math.abs(event.beta - lastAcc.beta); // beta轴偏转角

var delG = Math.abs(event.gamma - lastAcc.gamma); // gamma轴偏转角

if ( (delA > 15 && delB > 15) || (delA > 15 && delG > 15) || (delB > 15 || delG > 15)) {

// 用户设备摇动了,触发响应操作

// 此处的判断依据是任意两个轴篇转角度大于15度

alert('摇了');

}

lastAcc = event; // 存储上一次的event

});

//摇一摇(使用DeviceMotion事件, 推荐,应为可以计算加速度)

if(window.DeviceMotionEvent) {

var speed = 25; // 用来判定的加速度阈值,太大了则很难触发

var x, y, z, lastX, lastY, lastZ;

x = y = z = lastX = lastY = lastZ = 0;

window.addEventListener('devicemotion', function(event){

var acceleration = event.accelerationIncludingGravity;

x = acceleration.x;

y = acceleration.y;

if(Math.abs(x-lastX) > speed || Math.abs(y-lastY) > speed) {

// 用户设备摇动了,触发响应操作

// 此处的判断依据是用户设备的加速度大于我们设置的阈值

alert('摇了');

}

lastX = x;

lastY = y;

}, false);

}

摇一摇的代码判断逻辑

var isStarted = false; // 是否开始摇动

// 开始摇签

function start() {

isStarted = true;

$('.qiancover').hide(); //把封面背景上的静态签筒隐藏

$('.decode').hide(); // 解签页面隐藏

$('.result').show(); // 把签筒摇动的div显示出来

// setTimeout(showDecode, 3000);

}

// 显示正在解签

function showDecode() {

$('.result').hide(); // 把签筒摇动的div隐藏起来

$('.decode').show(); // 显示正在解签

setTimeout(jumpToDecode, 3000);

}

// 跳至签文页面

function jumpToDecode(){

var urls = ["#", "#"]; // 用来存签文结果页面

var jumpTo = urls[parseInt(Math.random() * urls.length)]; // 随机跳转至签文结果页面

window.location = jumpTo;

};

这篇关于h5 android 重力 晃动,HTML5摇一摇(上)—如何判断设备摇动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/284680

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.