JS实现纸牌发牌动画


Posted in Javascript onJanuary 19, 2021

本文实例为大家分享了JS实现纸牌发牌动画的具体代码,供大家参考,具体内容如下

先看演示

JS实现纸牌发牌动画

JS实现纸牌发牌动画

游戏构建准备

1.准备52张纸牌
2.一张桌布
3.编辑工具为 Visual Code

技术概要

1.对象操作
2.数据操作
3.JS animation动画
4.全局变量

function desen_x(){
 let that = this;
 var desen=["h_1","h_2","h_3","h_4","h_5","h_6","h_7","h_8",
 "h_9","h_10","h_11","h_12","h_13","p_1","p_2","p_3","p_4"
 ,"p_5","p_6","p_7","p_8","p_9","p_10","p_11","p_12","p_13"
 ,"t_1","t_2","t_3","t_4","t_5","t_6","t_7","t_8","t_9","t_10"
 ,"t_11","t_12","t_13","x_1","x_2","x_3","x_4","x_5","x_6","x_7"
 ,"x_8","x_9","x_10","x_11","x_12","x_13"];
 //将你的扑克前戳名全部存储到数组中
 var Obj = new Object(); //新建一个对象
 var array=[];//空数组一个
 for(var i=0;i<4;i++){//游戏演示里只需要发4张扑克,所以只要<4 
   var x=Math.round(Math.random()*52);//随机数取整*52
   Obj[i]=x;//存入到全局变量中 否则每次只能存一个数值
 }
 console.log(Obj);//打印对象看看是不是4个对象
 window.array=[desen[Obj[0]],desen[Obj[1]],desen[Obj[2]],desen[Obj[3]]];
 //将存好的数组 带入扑克全局
}
function send_poker(){ //该方法是发牌事件
 console.log(window.array);
 //测试你的全局变量是否正常
 //并且将传递的全局变量带入temp[]
 var temp=[window.array[0],window.array[1],window.array[2],window.array[3]];
 var ti=0;
 var iamges="../poker/"+temp+".png";//这是图片的默认路径 +你的 desen
 var creator=document.getElementById("d_back"); //取得操作的dom父元素
 var po_1=document.createElement("div");//虚拟生成div
 var num = 0;       //初始化变量
 //po_1.src="../h_1.png";
 //img_1.scr="../images/poker/h_1.png";
 
 for(var i=0;i<temp.length;i++){//循环temp
  var that=this;
  var img_1=document.createElement("img");
  img_1.src+="./images/poker/"+temp[i]+".png";//对创建的img赋值可变的路径
   console.log("等于0时");
  var ten=10;
  img_1.className="poker_float";//为其指定一个类,也就是默认的初始发牌位置
  
  
  creator.appendChild(img_1);//生成对象
   
  
  //"../images/poker/"+temp.i+".png";
  
 }

 
  move_poker();//该方法是自封装的动画
  
}

动画事件

function move_poker(){ //移动扑克
 var node = document.getElementById("d_back").childNodes;//获取父元素下的所有子节点
 console.log(node);//打印出有多少
 var n5=node[9];//以要操作的 img对象类为 9开始操作
 var n6=node[10];
 var n7=node[11];
 var n8=node[12];
 var popo=anime({//animation动画可在最后查看
  targets: n5, //操作的对象
  translateX:-150, //移动到的横向位置
  translateY: -250,//移动到的纵向位置
  easing: 'easeInOutQuad',//缓动,不更改css机制
  duration:100,//完成时间
  });
  var popo1= anime({
  targets: n6,
  translateX:-100,
  translateY: -250,
  easing: 'easeInOutQuad',
  duration:200,
  });
  var popo2=anime({
  targets: n7,
  translateX:-50,
  translateY: -250,
  easing: 'easeInOutQuad',
  duration:300,
  });
  var popo3= anime({
  targets: n8,
  translateX:0,
  translateY: -250,
  easing: 'easeInOutQuad',
  duration:400,
  });
}
function gui(){ //GUI 是将所有节点复位,方便下次发牌
 var node = document.getElementById("d_back").childNodes;
 var n5=node[9];
 var n6=node[10];
 var n7=node[11];
 var n8=node[12];
 var popo4=anime({
  targets: [n5,n6,n7,n8],
  translateX:0,
  translateY: 0,
 })
 node.removeChild(popo4);
}

animation封装

function setAnimationsProgress(insTime) { //该方法有多个dom时,则执行异或异步线程模式进行
 var i = 0;
 var animations = instance.animations;
 var animationsLength = animations.length; 
 while (i < animationsLength) { 
  var anim = animations[i];
  var animatable = anim.animatable;
  var tweens = anim.tweens;
  var tweenLength = tweens.length - 1;
  var tween = tweens[tweenLength];
  if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; } 
  var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;
  var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);
  var strings = tween.to.strings;
  var round = tween.round;
  var numbers = [];
  var toNumbersLength = tween.to.numbers.length;
  var progress = (void 0);
  for (var n = 0; n < toNumbersLength; n++) {
  var value = (void 0);
  var toNumber = tween.to.numbers[n];
  var fromNumber = tween.from.numbers[n] || 0;
  if (!tween.isPath) {
   value = fromNumber + (eased * (toNumber - fromNumber));
  } else {
   value = getPathProgress(tween.value, eased * toNumber);
  }
  if (round) {
   if (!(tween.isColor && n > 2)) {
   value = Math.round(value * round) / round;
   }
  }
  numbers.push(value);
  }
  var stringsLength = strings.length;
  if (!stringsLength) {
  progress = numbers[0];
  } else {
  progress = strings[0];
  for (var s = 0; s < stringsLength; s++) {
   var a = strings[s];
   var b = strings[s + 1];
   var n$1 = numbers[s];
   if (!isNaN(n$1)) {
   if (!b) {
    progress += n$1 + ' ';
   } else {
    progress += n$1 + b;
   }
   }
  }
  }
  setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);
  anim.currentValue = progress;
  i++;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
jQuery选择头像并实时显示的代码
Jun 27 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
Oct 17 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
AngularJS 指令的交互详解及实例代码
Sep 14 Javascript
JavaScript中常见的八个陷阱总结
Jun 28 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
基于js中this和event 的区别(详解)
Oct 24 Javascript
react-navigation之动态修改title的内容
Sep 26 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 24 Javascript
微信小程序canvas实现签名功能
Jan 19 #Javascript
vue二选一tab栏切换新做法实现
Jan 19 #Vue.js
微信小程序选择图片控件
Jan 19 #Javascript
jQuery冲突问题解决方法
Jan 19 #jQuery
js实现随机点名
Jan 19 #Javascript
js实现有趣的倒计时效果
Jan 19 #Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 #Javascript
You might like
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
python操作日期和时间的方法
2014/03/11 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
python 实现控制鼠标键盘
2020/11/27 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
社区母亲节活动方案
2014/03/05 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
海弦WR-800F
2022/04/05 无线电
Python加密与解密模块hashlib与hmac
2022/06/05 Python