When I was using ofo’s yellow bike App recently, I found that the bottom scan turned into a minion with moving eyes, which was quite interesting. Here I use HTML5 to simulate the effect.
Ofo eye effect
Effect analysis
As you can see from the effect, the gyroscope event is used to achieve this.
Here’s a look at some concepts of gyroscopic events in HTML5.
The gyro event is Deviceorientation, where alpha,beta and gamma of the event are mainly obtained.
aplha
The Angle of rotation of the mobile device about the Z axis when placed horizontally ranges from 0 degrees to 360 degrees.
beta
The Angle of rotation of the mobile device about the X-axis when placed horizontally is -180 degrees to 180 degrees.
gamma
The Angle of rotation of the mobile device about the Z axis when placed horizontally is -90 degrees to 90 degrees.
Here, we only need beta and gamma.
Decompress APK to get eye material:
Code implementation
<! DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, Word-wrap: break-word! Important; word-wrap: break-word! Important; "> <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'; / * * the author: le-ping wang * 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 = 'Browser does not support DeviceOrientationEvent'; } </script> </body> </html>Copy the code
The final result
Blog name: Wang Leping blog
CSDN blogs at blog.csdn.net/lecepin
Creative Commons Attribution – Non-commercial Use – No Deductive 4.0 International License