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 欢迎大家来这里 共同、分享、进步

时间: 2024-11-06 04:08:23

ionic 完美仿微信摇一摇的相关文章

js html5 仿微信摇一摇

看微信摇一摇之后忽然想知道他是怎么写的.于是就在网上查了一些资料,有些是借鉴别人的.大家共同学习啊 先放代码 <body onload="init()"> <p>用力摇一摇你手机</p> <audio style="display:hiden;width:0px; height:0px;" id="musicBox" preload="metadata" controls src=&q

android摇一摇实现(仿微信)

这个demo模仿的是微信的摇一摇,是一个完整的demo,下载地址在最下面.下面是demo截图:                 步驟: 1.手机摇动监听,首先要实现传感器接口SensorEventListener. /**开始重力传感器的检测*/ public void start() { // 获得传感器管理器 SensorManager sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVI

Android仿iPhone晃动撤销输入功能(微信摇一摇功能)

重力传感器微信摇一摇SensorMannager自定义alertdialogSensorEventListener 很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内容,很多手机需要一直按住退格键逐字逐句的删除,稍稍麻烦,不过 在iPhone上,有个人性化的功能,当我们想要去撤销刚刚输入的所有内容的时候,可以轻轻晃动手机,会弹出提示框,点击确定就可以清空内容,如下图: 在 android中,一般手机貌似没有定制这个功能,不过我们可以自己去实现这样的功能,放置在我

微信摇一摇红包

 功能介绍  2015年9月份左右微信摇一摇周边开放了"摇一摇红包组件接口",具备开发能力的用户,可以调用该接口进行功能开发.摇一摇红包功能通过简便的操作方式减少用户的操作层级.优化了用户的互动体验,并且趣味性地留存了用户和促进了品牌推广,参与活动的用户仅需在ibeacon设备蓝牙广播范围内打开手机蓝牙,进入微信摇一摇,等待出现"周边"入口,即可摇到现金红包,用户点击拆开红包,直接转入微信零钱包并且默认用户关注了公众号.  用户领取红包流程  现在,跟着一起,来体验

蓝牙Ibeacon室内定位和微信摇一摇周边原理分析

苹果推出Ibeacon室内定位技术是为了弥补GPS无法覆盖室内定位这种场景.苹果意味着创新,在其推动下,蓝牙Ibeacon得到了极大的应用.而腾讯则是利用蓝牙Ibeacon在场景体验方面进行了创新,实现了微信摇一摇周边的功能,这在O2O领域有巨大的潜力. 对苹果和腾讯来说,Ibeacon都是应用创新,而不是技术创新. 本文分析Ibeacon室内定位和微信摇一摇的原理. 一.无线测距原理 无线信号都有一个信号强度(RSSI),蓝牙BLE自然也有.根据蓝牙BLE自身的发射功率(假设能够获取这个功率值

微信企业号开发:微信考勤摇一摇考勤

看到网上又不好微信企业号的摇一摇考勤,自己也想做一个,但查遍了微信企业号文档,也没有看到摇一摇的相关API,本以为做不出来了,想不到再问了同事后,才知道其实很简单,摇一摇不需要微信企业号的文档,HTML5就有,摇一摇其实就是相当于点击了保存按钮而已. 其实获取地理位置HTML5也支持. HTML5 - 使用地理定位 <script> var x=document.getElementById("demo"); function getLocation() { if (nav

(实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class WxApi { const appId = ""; const appSecret = ""; const mchid = ""; //商户号 const privatekey = ""; //私钥 public $parame

Android 微信摇一摇功能实现

开发之前 今天学习了一下传感器, 脑子里就蹦出了微信的摇一摇, 于是鼓了鼓勇气抽空写了出来, 本人菜鸟一枚, 希望大神们多多指点 开发环境 Android Studio 2.2.1 JDK1.7 API 24 Gradle 2.2.1 相关知识点 加速度传感器 补间动画 手机震动 (Vibrator) 较短 声音/音效 的播放 (SoundPool) 开始开发 案例预览 案例分析 我们接下来分析一下这个案例, 当用户晃动手机时, 会触发加速传感器, 此时加速传感器会调用相应接口供我们使用, 此时

微信摇一摇羊年运势签实现?

在看其他公众号关于摇一摇实现代码前,大概猜想先建立一批各种运势的图文页面,然后通过摇一摇产生随机数字,并跳转到对应页面. 跟友人开玩笑,就弄一根上上签,怎么摇都是这个结果,皆大欢喜. 言归正传,先看看实现效果:http://www.avalonits.cn/wechat_rand/index.html 微信打开该页面,即可实现摇一摇. 当然,各微信公众号运营商都希望跳转到自己的页面,那么只要更改nvshengu.js中相应代码即可: jumpToDecode = function(){ ? 1