基于HTML5陀螺仪实现ofo首页眼睛移动效果

最近用ofo小黄车App的时候,发现以前下方扫一扫变成了一个眼睛动的小黄人,觉得蛮有意思的,这里用HTML5仿一下效果。

ofo眼睛效果

效果分析

从效果中不难看出,是使用陀螺仪事件实现的。

这里先来看一下HTML5中陀螺仪事件的一些概念。

陀螺仪事件为deviceorientation,这里主要获取事件中的alpha,beta,gamma。

aplha

行动装置水平放置时,绕 Z 轴旋转的角度,数值为 0 度到 360 度。

beta

行动装置水平放置时,绕 X 轴旋转的角度,数值为 -180 度到 180 度。

gamma

行动装置水平放置时,绕 Y 轴旋转的角度,数值为 -90 度到 90 度。

这里,只需要用到beta和gamma。

将apk解压,得到眼睛素材:

代码实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>Document</title><style>#box{position: relative;width: 300px;margin: 0 auto;}#face{background-image: url(images/face.png);background-size: cover;width: 300px;height: 300px;position: absolute;}#eyeLeft{background-image: url(images/eye.png);background-size: cover;width: 40px;height: 40px;position: absolute;top: 90px;left: 100px;}#eyeRight{background-image: url(images/eye.png);background-size: cover;width: 40px;height: 40px;position: absolute;top: 90px;left: 190px;}#glass{background-image: url(images/glass.png);background-size: cover;width: 300px;height: 300px;position: absolute;}</style>
</head>
<body><div id="box"><div id="face"></div><div id="eyeLeft"></div><div id="eyeRight"></div><div id="glass"></div><div id="log"></div></div>
<script>
'use strict';/*
* author: 王乐平
* blog: http://blog.csdn.net/lecepin
* date:2017.7.17
*/var eyeLeftPosition = {start: [70, 78],end: [100, 110]
};var eyeRightPosition = {start: [150, 78],end: [190, 110]
};var eyeLeftCenterPosition = {x: (eyeLeftPosition.end[0] - eyeLeftPosition.start[0]) / 2   eyeLeftPosition.start[0],y: (eyeLeftPosition.end[1] - eyeLeftPosition.start[1]) / 2   eyeLeftPosition.start[1]
};var eyeRightCenterPosition = {x: (eyeRightPosition.end[0] - eyeRightPosition.start[0]) / 2   eyeRightPosition.start[0],y: (eyeRightPosition.end[1] - eyeRightPosition.start[1]) / 2   eyeRightPosition.start[1]
};var r = 20;var eyeLeft = document.querySelector('#eyeLeft');
var eyeRight = document.querySelector('#eyeRight');if (window.DeviceOrientationEvent) {window.addEventListener('deviceorientation', function (event) {let {alpha, beta, gamma} = event;eyeLeft.style.left = eyeLeftCenterPosition.x   gamma / 90 * r   'px';eyeRight.style.left = eyeRightCenterPosition.x   gamma / 90 * r   'px';eyeLeft.style.top = eyeRight.style.top = eyeLeftCenterPosition.y   beta / 180 * r   'px';eyeRight.style.transform = eyeLeft.style.transform = eyeRight.style.WebkitTransform = eyeLeft.style.WebkitTransform = 'rotate('   beta   'deg)';}, false);
} else {document.querySelector('body').innerHTML = '浏览器不支持DeviceOrientationEvent';
}
</script>
</body>
</html>

最终效果

博客名称:王乐平博客

CSDN博客地址:http://blog.csdn.net/lecepin


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定时开机 命令 自动开机

自动开机&#xff1a; 首先开机后按住Delete键&#xff0c;就是平常常用的删除按键&#xff0c;然后就会进入到BIOS界面。虽然是一个满眼E文的蓝色世界&#xff0c;但不要害怕&#xff0c;没有问题的。 在BIOS设置主界面中选择“Power”选项,进入电源管理窗口。有些机器是在“P…

多米诺骨牌 优化版

算法&#xff1a; 在之前搜索出状态的基础上&#xff0c;再压缩一次状态。 View Code //by yefeng #include<iostream> using namespace std;typedef long long LL; const int mod 9937; int mask,idx, n , m;struct Matrix{int mat[257][257];void zero(){ memse…

Apache Camel请向我解释这些端点选项的含义

在即将发布的Apache Camel 2.15中&#xff0c;我们使Camel更智能。 现在&#xff0c;它可以充当老师&#xff0c;并向您说明其配置方式以及这些选项的含义。 Camel可以做的第一课是告诉您如何配置所有端点以及这些选项的含义。 接下来我们要学习的课程是让Camel解释EIP的选项…

JS正则表达式的基础用法

RegExp&#xff08;正则表达式&#xff09;对象 正则表达式是一个描述字符模式的对象&#xff0c;可以处理更复杂的字符串。进行匹配替换。 常用的修饰符&#xff1a; i/m/g 使用方法&#xff1a; 【声明方法一: new RegExp(value)】 var patt new RegExp(value)&#xff1b…

JS获取屏幕浏览器网页高度和宽度属性

1 网页可见区域宽&#xff1a;document.body.clientWidth 2 网页可见区域高&#xff1a;document.body.clientHeight 3 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 4 网页可见区域高&#xff1a;document.body.offsetHeight (包括边线的宽) 5 网页正…

微信扫码进入小程序

这几天开发完小程序之后&#xff0c;需要实现微信扫码进入小程序&#xff0c;坎坎坷坷的过程终于实现了&#xff0c;现在做一总结&#xff1a; 1、配置二维码规则&#xff1a; 2、页面插入代码即可&#xff1a; onLoad: function(options) {console.log("index 生命周期 o…

使用用户名/密码和Servlet安全性保护WebSockets

RFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的&#xff0c;其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们谈谈协议本身内置的一些安全性&#xff1a; HTTP请求中的Origin头仅包含标识发起该请求的主体&#xff08;网页…

文件的读取

这几天在研究文件读取问题&#xff0c;写了个小demo&#xff0c;如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><input type…

关于stm32启动文件的选择

关于stm32启动文件的选择 1推荐- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices - startup_stm32f10x_ld.s: for STM32 Low density devices - startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices - startup_stm32f10x_md.s: fo…

如何使用GZip和Jersey压缩Java REST API中的响应

在某些情况下&#xff0c;您的REST api会提供非常长的响应&#xff0c;我们都知道移动设备/网络上的传输速度和带宽仍然非常重要。 我认为这是开发支持移动应用程序的REST api时需要解决的第一个性能优化点。 你猜怎么了&#xff1f; 因为响应是文本&#xff0c;所以我们可以压…

C函数篇(recv函数)

简述 从一个套接口接收数据。表头文件&#xff1a;#include<sys/types.h>#include<sys/socket.h>int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);s&#xff1a;一个标识已连接套接口的描述字。buf&#xff1a;用于接收数据的缓冲区。len&…

js文字排序的方法

拼音排序&#xff1a; var arr [{ a: 1, b: "我" }, { a: 1, b: "是" }, { a: 1, b: "帅" }, { a: 1, b: "哥" }, { a: 1, b: "你" }, { a: 1, b: "服" }, { a: 1, b: "不" }];arr.sort(function comp…

线程池之外:Java并发并不像您想象的那么糟糕

Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff0c;我们将详细介…

编写高质量的代码,改善c#程序的157个建议_之1~10

//编写高质量的代码&#xff0c;改善c#程序的157个建议# 1、正确操作字符串## 1* 确保尽量少的装箱* 避免分配额外的内存空间1. 会进行一次装箱C#string str1"str1"9;2. 没有装箱&#xff0c;调用的是整型的ToString方法C#string str2"str2"9.ToString();#…

vue中使用Ueditor编辑器 -- 1

一、 下载包&#xff1a; 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器&#xff0c;官网地址为&#xff1a;http://ueditor.baidu.com/website/download.html 下载解压后会得到如果下文件目录&#xff1a; 将上述Ueditor文件夹拷贝到vue项目的static文件夹中&#xff0…

编译原理--递归下降分析实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试递归下降分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 2.实验要求 对下列文法&#xff0c;用递归下降分析法对任意输入的符号串进行分析&#xff1a; &#…

浅析路径遍历漏洞 文/饭

许多的Web应用程序一般会有对服务器的文件读取查看的功能&#xff0c;大多会用到提交的参数来指明文件名&#xff0c;形如&#xff1a;http://www.nuanyue.com/getfileimage.jgp 当服务器处理传送过来的image.jpg文件名后&#xff0c;Web应用程序即会自动添加完整路径&#xff…

摆脱困境:在DbUnit数据集中使用空值

如果我们正在为使用Spring Framework的应用程序编写集成测试&#xff0c;则可以通过使用Spring Test DbUnit将DbUnit与Spring测试框架集成。 但是&#xff0c; 这种集成并非没有问题 。 通常&#xff0c;我们必须在运行测试之前向数据库中插入空值&#xff0c;或者验证保存到…

artdialog5 bug

1.使用artdialog5时&#xff0c;使用两个输入框传值&#xff0c;一直无法取到值&#xff0c;使用简单的ID无法取到值&#xff0c;如idbranch..改为idbranch_str_dialog就可以了&#xff0c;问题是解决了&#xff0c;可是没有找到原因所在&#xff01; 转载于:https://www.cnblo…

vue中通过js控制页面样式方法

在使用vue.js框架的时候&#xff0c;有时候会希望在页面渲染完成之后&#xff0c;再执行函数方法来处理初始化相关的操作&#xff0c;如果只处理页面位置、宽或者高时&#xff0c;必须要在页面完全渲染之后才可以&#xff0c;页面没有加载完成之前&#xff0c;获取到的宽高不准…