基于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的选项…

微信扫码进入小程序

这几天开发完小程序之后&#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;网页…

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

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

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; &#…

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

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

快速指南:剖析JBoss BPM跨进程通信

&#xff08;文章来宾与北美红帽公司高级解决方案架构师杰伊保拉杰共同撰写&#xff09; 几周的提示与技巧文章将深入探讨JBoss BPM Suite&#xff0c;特别是有关如何在两个流程之间进行通信的问题。 在进入解决方案详细信息之前&#xff0c;让我们首先约束将要讨论的用例。 …

使用命令行工具创建WildFly OpenShift应用程序

通过使用快速入门&#xff0c;可以在OpenShift上轻松配置WildFly的新实例。 只需单击一下&#xff0c;您就可以准备就绪&#xff01; 通常&#xff0c;OpenShift的高级用户使用命令行工具 。 但是&#xff0c;您无法使用CLI工具创建WildFly墨盒。 但现在已解决错误1134134 。 …

word-break属性和css换行显示

这几天在做项目的时候&#xff0c;遇到了比较棘手的问题&#xff0c;便是在一个标签里边展示内容&#xff0c;如果说展示中文汉字&#xff0c;一点问题都没有&#xff0c;但是只要连续展示英文字母或者中文的标点符号&#xff08;中间不带空格&#xff09;&#xff0c;那么所渲…

第四种行转列

--动态处理 select A.StuName,A.BZKTypeName,cast(A.BKCODE as varbinary(MAX)) even, row_number() over (partition by StuName,BZKTypeName order by getdate()) ID into #t1 from BKLIST A --where StuName林健辉 declare sql1 varchar(max) declare sql2…

React-router的基本使用

1、安装使用 $ npm install -S react-router import { Router, Route, hashHistory } from react-router;render((<Router history{hashHistory}><Route path"/" component{App}/></Router> ), document.getElementById(app)); 1.1、版本问题 reac…

九宫格有规律高亮滚动效果

前几天朋友去面试&#xff0c;面试官要求当场用九宫格写出一个滚动有规律的大转盘滚动高亮效果&#xff0c;结果可想而知。如下图&#xff1a; 也就是说当页面刚进来的时候&#xff0c;红色方块在左上角&#xff0c;接下来按照图上所标注的箭头方向来依次循环。当我听说了这个面…

使用Maven原型高效创建Eclipse模块

Maven Archetype是一个项目模板工具包&#xff0c;可为开发人员提供生成内置或自定义脚手架工件的参数化版本的方法。 最近&#xff0c;我将其应用于我们的Xiliary P2存储库&#xff0c;以实现Eclipse模块存根创建的自动化。 由于效果很好&#xff0c;所以我认为值得在这篇文章…

framelayout

编写的mail.xml文件: <?xml version"1.0" encoding"utf-8"?><FrameLayout xmlns:android"http://schemas.android.com/apk/res/android" android:id"id/frame" android:layout_width"fill_parent" android:layou…

扩展Asterisk1.8.7的CLI接口

我之前有一篇文章&#xff08;http://www.cnblogs.com/MikeZhang/archive/2012/04/14/asteriskCLIAppTest20120414.html&#xff09;介绍过如何扩展asterisk的cli接口&#xff0c;本篇是它的继续&#xff0c;总结下&#xff0c;也方便我以后查阅。 大部分情况下&#xff0c;配置…

CSS中的 ',' 、''、'+'、'~'

1、群组选择器&#xff08;,&#xff09; /* 表示既h1&#xff0c;又h2 */ h1, h2 {color: red; } 2、后代选择器&#xff08;空格&#xff09; /* 表示 h1 下面的所有 span 元素&#xff0c;不管是否以 h1 为直接父元素 */ h1 span {} 3、子元素选择器&#xff08;>&#x…

单片机第三季-第七课:STM32中断体系

目录 1&#xff0c;NVIC 2&#xff0c;中断和事件的区别 3&#xff0c;优先级的概念 4&#xff0c;如何实际编程使用外部中断 5&#xff0c;STM32开发板通过按键控制LED 5.1&#xff0c;打开相应GPIO模块时钟 5.2&#xff0c;NVIC设置 5.3&#xff0c;外部中断线和配套…