开始之前大家可以先体验效果

进入

这种动态效果只能说yyds

我们这之前需要先考虑这个页面都有哪些元素以及交互

1.那些是静态资源

2.那些是动态元素

3.动态元素实现思路

4.按钮如何绑定动态

一,创建画布导入静态资源

我们创建之后并把它挂载到dom元素上面

this.app = new PIXI.Application({width:window.innerWidth,height:window.innerHeight,backgroundColor:0xffffff,resizeTo:window})this.stage = this.app.stage;// 渲染document.querySelector(selector).appendChild(this.app.view);

导入静态资源(按钮,车把,车,跑道)

this.loader = new PIXI.Loader();this.loader.add("btn.png",'images/btn.png');this.loader.add("btn_circle.png","images/btn_circle.png");this.loader.add("brake_bike.png","images/brake_bike.png");this.loader.add("brake_handlerbar.png","images/brake_handlerbar.png");this.loader.add("brake_lever.png","images/brake_lever.png");this.loader.add("malu.png","images/malu.png");this.loader.add("malu_line.png","images/malu_line.png");this.loader.load();

由于我们的动画是基于图片的,我们应该想到在图片加载完成之后再去加载动画效果。我们需要用到onComplete中去调用loader这是容器

this.loader.onComplete.add(()=>{this.show();});

我们图片尺寸非常大所以我们要对初始图片尺寸及位置进行配置

createAction(){//创建一个容器,存放按钮let actionbtn = new PIXI.Container();this.stage.addChild(actionbtn);//创建按钮let btni = new PIXI.Sprite(this.loader.resources['btn.png'].texture);//按钮边上的圆let btnc = new PIXI.Sprite(this.loader.resources['btn_circle.png'].texture);let btnc2 = new PIXI.Sprite(this.loader.resources['btn_circle.png'].texture);//添加到画布渲染actionbtn.addChild(btni);actionbtn.addChild(btnc);actionbtn.addChild(btnc2);//调整位置btni.pivot.x = btni.pivot.y = btni.width/2;btnc.pivot.x = btnc.pivot.y = btnc.width/2;btnc2.pivot.x = btnc2.pivot.y = btnc2.width/2;//调整大小缩放btnc.scale.x = btnc.scale.y = 0.8;//动画效果gsap.to(btnc.scale,{duration:1,x:1.3,y:1.3,repeat:-1});gsap.to(btnc,{duration:1,alpha:0,repeat:-1});return actionbtn;}

创建开始结束时间并绑定按钮

let actionbtn = this.createAction();// 调整坐上边距actionbtn.x=window.innerWidth/2+400;actionbtn.y = 400;actionbtn.scale.y=actionbtn.scale.x=.5actionbtn.interactive = true;actionbtn.buttonMode = true;// 按下效果actionbtn.on("mousedown",()=>{//按下执行刹车把的动画gsap.to(bikeLever,{duration:.6,rotation:Math.PI/180*-30});pause();})// 松开效果actionbtn.on("mouseup",()=>{//松开执行刹车把松开动画gsap.to(bikeLever,{duration:.6,rotation:0});start();})

事件完成后即可通过按钮来进行车子的刹车和启动

速度效果

这里呢我们先是在y轴创建随机的点,在y轴竖向流动,再将画布进行旋转。

ps:这方法比较简单,正常斜线运动是要通过算法。

let particle = new PIXI.Container(); this.stage.addChild(particle);//调整中心点particle.pivot.x = window.innerWidth/2;particle.pivot.y = window.innerHeight/2;//调整位置particle.x = window.innerWidth/2;particle.y = window.innerHeight/2;//调整角度(旋转)particle.rotation = 35*Math.PI/180;//新建一个数组存储点位let particlelist = [];// 循环创建点for (let i = 0; i < 10; i++) {let gr = new PIXI.Graphics();// 取色gr.beginFill(this.setColor4());gr.drawCircle(0,0,6);gr.endFill();// 位置随机取let pitem = {sx:Math.random()*window.innerWidth,sy:Math.random()*window.innerHeight,gr:gr}gr.x = pitem.sx;gr.y = pitem.sy;particle.addChild(gr);particlelist.push(pitem);}

创建完点之后我们旋转y轴

let speed = 0;//判断是开始还是暂停let status = true;// 运动function loop(){if(status){speed+=.2;}else{speed-=.4;}//设置加速最大值speed = Math.min(speed,30);//设置减速最小值speed = Math.max(speed,0);//循环改变点的位置for (let i = 0; i < particlelist.length; i++) {const pitem = particlelist[i];pitem.gr.y+=speed;pitem.sy = pitem.gr.y;if(speed>=20){pitem.gr.scale.y=40;pitem.gr.scale.x=0.03;}//超出屏幕重置位置if(pitem.gr.y>window.innerHeight)pitem.gr.y=0;}//计算改变Ymaluliney.y+=(Math.cos(35*Math.PI/180))*speed;//计算改变Xmaluliney.x-=(Math.sin(35*Math.PI/180))*speed;//超出重置if(maluliney.y>400)maluliney.y=-100,maluliney.x=720;}

最后一步让公路动起来

1.引入马路并旋转合适角度

//马路let maluliney = new PIXI.Container(); maluliney.pivot.x = window.innerWidth/2;maluliney.pivot.y = window.innerHeight/2;//位置maluliney.x = window.innerWidth/2;maluliney.y = window.innerHeight/2;this.stage.addChild(maluliney);//旋转maluliney.rotation = 35*Math.PI/180;//引入马路let malu = new PIXI.Sprite(this.loader.resources['malu.png'].texture);

2.在窗口大小发生改变时重置马路位置

// 监听窗口变化let resize =  () => {bikeContainer.x = window.innerWidth - bikeContainer.width-1000;bikeContainer.y = window.innerHeight - bikeContainer.height-1000;//刹车时车的顿感malu.x = window.innerWidth - bikeContainer.width-600;malu.y = window.innerHeight - bikeContainer.height-750;}

3.让马路一直循环动起来

//计算改变Ymaluliney.y+=(Math.cos(35*Math.PI/180))*speed;//计算改变Xmaluliney.x-=(Math.sin(35*Math.PI/180))*speed;

到这里就大功告成了,可以欣赏我们的成果了。

ps:灵感以及技术学习来自 大帅老猿 ,一个编程三十多年的老程序猿猴!

微信公众号里搜 大帅老猿,在他这里可以学到很多东西!快来和我一起学习!卷!

源码地址 : https://github.com/QZ-WangXianRen/YCY-TrainingCamp-S1

实战pixi+gsap,仿刹车动画相关推荐

  1. 前端canvas动效实战,PIXI+GSAP仿写vanmoof刹车动效 | 猿创营

    前言 事情是这样的,上个月接了一个活儿.客户要我们模仿一个国外的网站 https://www.vanmoof.com/en-NL/s3?color=dark 为他们做几个展示动效. 确实很酷!这个项目 ...

  2. 关东升的《iOS实战:图形图像、动画和多媒体卷(Swift版)》上市了

    关东升的<iOS实战:图形图像.动画和多媒体卷(Swift版)>上市了 承蒙广大读者的厚爱我的<iOS实战:图形图像.动画和多媒体卷(Swift版)>京东上市了,欢迎广大读者提 ...

  3. canvas实战之酷炫背景动画(二)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  4. canvas实战之酷炫背景动画(三)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  5. 仿联想商城laravel实战---1、仿联想商城需求和数据库设计(lavarel如何搭建项目)...

    仿联想商城laravel实战---1.仿联想商城需求和数据库设计(lavarel如何搭建项目) 一.总结 一句话总结: composer引入lavarel.配置域名.配置apache 1.项目名 le ...

  6. 使用gsap javascript进行动画和React

    If there's one thing I've learned from showing my websites to non-technical friends and family it's ...

  7. 视频教程-C# 实战项目——制作仿QQ软件-C#

    C# 实战项目--制作仿QQ软件 专注编程领域,拥有多年开发经验 王小科 ¥49.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最少立减5元 ...

  8. canvas实战之酷炫背景动画(一)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  9. canvas实战之酷炫背景动画(七)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

  10. canvas实战之酷炫背景动画(五)

    系列文章 canvas实战之酷炫背景动画(一) canvas实战之酷炫背景动画(二) canvas实战之酷炫背景动画(三) canvas实战之酷炫背景动画(四) canvas实战之酷炫背景动画(五) ...

最新文章

  1. Ubuntu系统安装libssl-dev
  2. arduinohanshu_Arduino 常用函数参考文档
  3. linux后台不挂断运行 nohup命令
  4. mysql 查看锁_别吵吵,分布式锁也是锁
  5. 高级精致智能快捷的Web设计原则案例
  6. selenium call javascript function
  7. 基于JAVA+SpringMVC+MYSQL的城市公交查询系统
  8. 尴尬的风险管理如何深入下去-某公司为例
  9. HDU2024 C语言合法标识符【入门】
  10. SumatraPDF 适配 EPUB,MOBI
  11. IDEA设置字体大小没反应解决
  12. 甘超波:NLP表象系统
  13. 如何正确重新启动计算机,电脑突然重启,详细教您电脑忽然重启如何解决
  14. cistern java,basin是什么意思_basin怎么读_basin翻译_用法_发音_词组_同反义词_盆-新东方在线英语词典...
  15. BigDecimal比较大小工具类
  16. 有关计算机的英语作文一千字,关于网络的英语作文
  17. 能装linux的嵌入式,试试一张软盘可装下Linux(嵌入式Linux)
  18. 停电让服务器自动关机,服务器断网/断电自动关机小工具 断网/断电5分钟后自动关机...
  19. Java互联网架构-企业级实战秒杀系统优化方案与应用思路
  20. Mac 终端命令汇总

热门文章

  1. 手机离线地图——基于OruxMaps离线高清卫星地图制作发布
  2. 内购 税务信息页填写-新版填写
  3. 基于单片机门电路测试
  4. 读书笔记:谁都可以进外企
  5. 什么是EasyUI,如何使用EasyUI?--easyui的十二种用法
  6. 网络适配器有感叹号(56)
  7. Android P wakeup 亮屏流程
  8. (自适应动态规划综述)
  9. VBA 程序加密破解
  10. 服务器系统2008恢复,win2003升级为win2008、win2012保留数据重装恢复数据说明