基于HTML5陀螺仪实现移动动画效果


本文摘自PHP中文网,作者php中世界最好的语言,侵删。

这次给大家带来基于HTML5陀螺仪实现移动动画效果基于HTML5陀螺仪实现移动动画效果的注意事项有哪些,下面就是实战案例,一起来看一下。

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

ofo眼睛效果

效果分析

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

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

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

aplha

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

beta

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

gamma

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

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

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

代码实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

<!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>

  <p id="box">

    <p id="face"></p>

    <p id="eyeLeft"></p>

    <p id="eyeRight"></p>

    <p id="glass"></p>

    <p id="log"></p>

  </p>

<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>

最终效果

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

H5拖放API进行拖放排序

IE8不兼容rgba()如何处理

以上就是基于HTML5陀螺仪实现移动动画效果的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

h5开发视频遇到的问题及解决方案

HTML5中postmessage api的基本使用

HTML5优势到底有哪些?

教你用HTML5画一个馋人的西瓜

button按钮和submit按钮有什么区别?

HTML5实现把上传的图片转成base64编码在显示(代码实例)

HTML5 canvas绘制五角星的方法

如何使用canvas画出平滑的曲线?(代码)

h5新标签浏览器的兼容问题

HTML5 canvas如何绘制动态径向渐变

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...