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


Posted in HTML / CSS onJuly 31, 2017

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

ofo眼睛效果

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

效果分析

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

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

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

aplha

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

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

beta

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

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

gamma

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

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

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

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

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

代码实现

<!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: 王乐平
* 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>

最终效果

 

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

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
使用css3背景渐变中的透明度来设置不同颜色的背景渐变
Mar 31 HTML / CSS
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
Apr 03 HTML / CSS
纯CSS实现的大小渐变、渐远效果
Apr 15 HTML / CSS
实例讲解使用CSS实现多边框和透明边框的方法
Sep 08 HTML / CSS
深入浅析css3 中display box使用方法
Nov 25 HTML / CSS
CSS3 实现雷达扫描图的示例代码
Sep 21 HTML / CSS
HTML5的革新 结构之美
Jun 20 HTML / CSS
html5使用canvas画一条线
Dec 15 HTML / CSS
24个canvas基础知识小结
Dec 17 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
Apr 23 HTML / CSS
html+js 实现markdown编辑器效果
Oct 23 HTML / CSS
HTML+CSS 实现顶部导航栏菜单制作
Jun 03 HTML / CSS
html5教你做炫酷的碎片式图片切换 (canvas)
Jul 28 #HTML / CSS
H5 canvas实现贪吃蛇小游戏
Jul 28 #HTML / CSS
LocalStorage记住用户和密码功能
Jul 24 #HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
Jul 24 #HTML / CSS
H5调用相机拍照并压缩图片的实例代码
Jul 20 #HTML / CSS
h5实现获取用户地理定位的实例代码
Jul 17 #HTML / CSS
HTML5 表单验证失败的提示语问题
Jul 13 #HTML / CSS
You might like
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
Python 字符串定义
2009/09/25 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
python WindowsError的错误代码详解
2017/07/23 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
浅谈Python处理PDF的方法
2017/11/10 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python实现随机漫步功能
2018/07/09 Python
10款最好的Python开发编辑器
2019/07/03 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
python对一个数向上取整的实例方法
2020/06/18 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
linux面试题参考答案(8)
2016/04/19 面试题
高中英语教学反思
2014/02/04 职场文书
安全生产专项整治方案
2014/05/06 职场文书
社区元宵节活动总结
2015/02/06 职场文书
运动会开幕式主持词
2015/07/01 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL