ionic 完美仿微信摇一摇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ionic 完美仿微信摇一摇相关的知识,希望对你有一定的参考价值。

今天我们使用ionic框架完美仿制微信摇一摇功能,先来看看最终效果图

技术分享?

制作微信摇一摇功能需要调用 陀螺仪传感器(Device Motion)
技术分享
参考文档地址http://api.ionic-china.com/help/action/Device%20Motion/Device%20Motion.html

播放音效需要 播放音乐(Native Audio)
技术分享
参考文档地址http://api.ionic-china.com/help/action/Native%20Audio/Native%20Audio.html
附:中文ngCordova参考文档

基本思路:

绘制两层底层为静态层上层动画层 - 执行方法时隐藏静态层显示动画层 - 动画结束后隐藏动画层显示静态层

1.先用photoshop处理分离元素
技术分享

2.用于平铺的背景层、静态层图片、动态层背景花、上半部图片、上半部阴影、下半部图片、下半部阴影、
技术分享

3.先平铺绘制背景层

1 <div class="shakebg"></div>

技术分享

4.在背景层中心绘制图片

1 <div class="shakebg"> <img src="img/shakeIcon.png"/> </div> 

技术分享

5.再来绘制动画层,先把背景层隐藏。不多赘述先画背景再画小花。

1     <div class="animetebg">
2         <img class="flower" src="img/flower.png" />
3     </div>

技术分享

6.绘制上半部背景、上半部图片以及阴影部分。

1     <div class="animetebg">
2         <img class="flower" src="img/flower.png" />
3         <div class="topShakeBox">
4             <img class="topShake" src="img/topShake.png" />
5             <div class="topBar"></div>
6         </div>
7     </div>

技术分享

技术分享

技术分享

7.按照相同方法绘制好下半部分,效果图。注意我们是一块一块绘制的,所以可以完美适配任何分辨率设备哦。

 1     <div class="animetebg">
 2         <img class="flower" src="img/flower.png" />
 3         <div class="topShakeBox">
 4             <img class="topShake" src="img/topShake.png" />
 5             <div class="topBar"></div>
 6         </div>
 7         <div class="bottomShakeBox">
 8             <div class="bottomBar"></div>
 9             <img class="bottomShake" src="img/bottomShake.png" />
10         </div>
11     </div>

技术分享

技术分享

8.现在使用CSS3给元素指定动画,注意:使用transform是开启GPU硬件加速提升流畅度

 1 .animetebg .topShakeBox{
 2     -webkit-animation: topShakeBoxAnimete 1s ease-in-out;
 3     animation:topShakeBoxAnimete 1s ease-in-out;
 4 }
 5 
 6 .animetebg .bottomShakeBox{
 7     -webkit-animation: bottomShakeBoxAnimete 1s ease-in-out;
 8     animation:bottomShakeBoxAnimete 1s ease-in-out;
 9 }
10 
11 @keyframes topShakeBoxAnimete {
12     0%   {
13         -webkit-transform:translateY(-5px);
14         transform:translateY(-5px);
15     }
16     50%  {
17         -webkit-transform:translateY(-100px);
18         transform:translateY(-100px);
19         }
20     100% {
21         -webkit-transform:translateY(-0px);
22         transform:translateY(-0px);
23     }
24 }
25 
26 @keyframes bottomShakeBoxAnimete {
27     0%   {
28         -webkit-transform:translateY(5px);
29         transform:translateY(5px);
30     }
31     50%  {
32         -webkit-transform:translateY(100px);
33         transform:translateY(100px);
34     }
35     100% {
36         -webkit-transform:translateY(0px);
37         transform:translateY(0px);
38     }
39 }

技术分享

9.写代码检测获取陀螺仪数据执行动画,先使用ionic小助手添加Device Motion和Native Audio插件(前面已经介绍过)记得先引用ngCordova模块。
Device Motion插件检测手机xyz三个方向数值是±10 其中:XY是手机旋转。Z是翻转正面是+10,反面是-10
如果用力摇晃手机会超出这个数值,就是根据这个做摇一摇

html中给
animetebg添加ng-show="animetebg.show"
shakebg添加ng-hide="shakebg.hide"
body标签添加ng-controller="startCtrl"

app.js添加以下代码,相关说明已经在代码注释。

 1 .controller("startCtrl",function($scope,$interval,$timeout,$ionicPlatform,$cordovaNativeAudio,$cordovaDeviceMotion){
 2     $scope.shakebg = [{hide:false}];
 3     $scope.animetebg = [{show:false}];
 4 
 5     $ionicPlatform.ready(function() {//载入音乐资源
 6        $cordovaNativeAudio
 7        .preloadSimple(‘click‘, ‘src/shake_sound.mp3‘,1,1)
 8     });
 9 
10     var motiontime;
11 
12     //获取陀螺仪数据方法
13     $scope.getMotionTime = function(){
14         motiontime = $interval(
15             function() {
16 
17               $cordovaDeviceMotion
18                 .getCurrentAcceleration()
19                 .then(function(motion) {
20 
21                     if(motion.x > 11 || motion.x < -11 || motion.y > 11 || motion.y < -11){
22                                 //手机向任意方向用力摇晃
23                                 $scope.showAnimete();//执行动画部分
24                                 $cordovaNativeAudio.play(‘click‘);//播放音乐
25                     }
26 
27                 }, function(err) {
28                     alert("陀螺仪错误 "+err);
29                 });
30 
31             },
32             100
33         );
34     };
35 
36     $scope.getMotionTime();//开启时钟获取数据
37 
38     //动画方法
39     $scope.showAnimete = function(){
40         $interval.cancel(motiontime);//停止掉获取数据时钟
41         $scope.shakebg.hide = true;//隐藏背景层
42         $scope.animetebg.show = true;//显示动画层
43 
44         var timer_b = $timeout(
45             function() {//动画结束
46                 $scope.animetebg.show = false;//隐藏动画层
47                 $scope.shakebg.hide = false;//显示背景层
48                 $scope.getMotionTime();//重新开启获取数据时钟
49             },
50             1000
51         ).then(
52             function() {
53                 $timeout.cancel(timer_b);
54             }
55         );
56     };
57 })

 

ionic版本:1.7.14
SDK:API23

源码下载地址:http://pan.baidu.com/s/1mh2XvOO

APK下载地址:http://pan.baidu.com/s/1c0K8wTy

PSD下载地址:http://pan.baidu.com/s/1o7kCx2y

ionic中文群:65048636 欢迎大家来这里 共同、分享、进步

以上是关于ionic 完美仿微信摇一摇的主要内容,如果未能解决你的问题,请参考以下文章

微信摇一摇摇不动怎么办

如何理解微信公会平台摇一摇软件中的iBeacon技术

cocos2dx 3.2怎么实现类似微信摇一摇

微信摇一摇为啥摇不到周边的设备?其他人都可以只有我的不行 是设置问题吗

shake.js实现微信摇一摇功能

玩转Android之加速度传感器的使用,模仿微信摇一摇