美文网首页JavaScript学习笔记
使用tweenjs写一个发牌的demo

使用tweenjs写一个发牌的demo

作者: stois | 来源:发表于2016-07-29 17:55 被阅读1897次

移动端h5的三大抽奖方式:转盘,老虎机,翻纸牌。
前两样demo比较多,用户也审美疲劳了。这次微信公众号要抽奖,于是调研了下翻纸牌。
预想的情景是,加载进入页面之后,纸牌从屏幕一个角落发放,并最终成为一个3*3的矩阵。
这件事可以直接用css的transform来解决,写好每个元素要偏移的位置,但会显得十分初级,也不利于复用。
之前做游戏的时候有使用过createjs引擎,其中对动画的处理使用了tween,十分平滑也易于定义。那么有没有不依赖于createjs的tween?搜了下,答案是有,在这里
先贴一个tweenjs的使用范例:

var element = document.getElementById('myElement');
var tween = new TWEEN.Tween({ top: 0, left: 0 })
.to({ top: 100, left: 100 }, 1000) 
.onUpdate(function() { 
    element.style.transform = 'translate(' + this.left + 'px, ' + this.top + 'px);';
 });

聪明的你看完肯定知道它是干啥的了。

现在发牌的问题归结为:9张牌,创建9个tween,发到不同的地方去。
关键的js代码:

            var tweens = new Array(9);
            var position = {x: 0, y: 0, rotation: 0};
            var targets = function(){
                var tmp = new Array(9);
                for(var j = 0 ; j < tmp.length ; j ++ ){
                    tmp[j] = document.getElementById('target'+(j+1));
                }
                return tmp ;
            }();
            console.log(targets);
            function createTweens(){
                
                var myW = targets[1].offsetWidth ;
                var myH = targets[1].offsetHeight ;
                for( var i = tweens.length -1  ; i >= 0  ; i -- ){
                    
                    var tween = new TWEEN.Tween(position)
                        .to({x: ((i%3)*1.2-1.2)*myW, y: 0-(parseInt(i/3)+1)*myH-10*parseInt(i/3), rotation: 359}, 200)
                        .delay(0)
                        //.easing(TWEEN.Easing.Cubic.In)
                        .onUpdate(function(i){
                            var j = i;
                            return function(){
                                targets[j].style.webkitTransform = 'translate(' + position.x + 'px, ' + position.y + 'px)';
                            }
                            
                        }(i))
                        .onComplete(function(){
                            position.x = 0 ;
                            position.y = 0 ;
                            console.log(position);
                        });
                    tweens[i] = tween ;
                }
            }

中间需要说明的是,写了一个闭包来绑定onUpdate; 每张纸牌从一个点发放到指定位置,经过了一些计算。
然后我们从上往下发牌:

function init() {

                createTweens();
                for( var i = tweens.length -1 ; i > 0  ; i--){
                    tweens[i].chain(tweens[i-1]);
                }
                

                tweens[tweens.length -1].start();

            }

我把demo放在了服务器上。其中翻牌的部分,请参考这里

相关文章

  • 使用tweenjs写一个发牌的demo

    移动端h5的三大抽奖方式:转盘,老虎机,翻纸牌。前两样demo比较多,用户也审美疲劳了。这次微信公众号要抽奖,于是...

  • tweenjs的初次使用

    实现一些更为平滑的欢动效果。使用:1.先去cdn找到tweenjs的引用链接和安装包。 3.使用:

  • 斗地主三步走——洗牌、发牌和看牌

    相信大家都玩过牌游斗地主吧,今天呢,阿Q就带大家写一个简单的斗地主的洗牌、发牌和看牌的小Demo。 看了上边的代码...

  • Vue.js 中使用缓动动画库 TweenJs

    TweenJs 是一个第三方的 javascript 动画库,可以轻松实现各种缓动动画效果。 一、TweenJs ...

  • tweenjs

    tweenjs 是使用 JavaScript 中的一个简单的补间动画库,支持数字、对象的属性和 CSS 样式属性的...

  • TweenJS

    TweenJS类库主要用来调整和动画HTML5和Javascript属性。提供了简单并且强大的tweening接口...

  • iOS使用Realm数据库

    下载地址:Note Demo简介: 使用Realm写的一个工程记录Demo,由Tabbar包含三个tab组成。第一...

  • markdown如何写出项目目录结构

    使用MarkDown写博文时,想对整个项目目录做一个说明,比如这样的: 案例:进入目录demo下,demo目录结构...

  • 使用React Native写一个Demo

    babyShow 基于React-Native框架练习的demo. 初始化一个项目: 划分模块 在根目录新建一个 ...

  • 简单好用的AlertViewController

    发现一个有趣的,打开这个DEMO的时候,偶然发现这个DEMO还是自己在2016年的时候写的。如今还在继续使用,不得...

网友评论

    本文标题:使用tweenjs写一个发牌的demo

    本文链接:https://www.haomeiwen.com/subject/utmzjttx.html