如何使用canvas实现人体时钟效果
本文小编为大家详细介绍“如何使用canvas实现人体时钟效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用canvas实现人体时钟效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
核心的API是PIXI.AnimatedSprite。
代码也是很短,就直接放到下面了
<!doctypehtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>HoneHoneClock</title><style>*{padding:0;margin:0;}html,body{width:100%;height:100%;}body{background-color:lightcyan;}canvas{position:absolute;left:0;top:0;width:100%;height:100%;z-index:1;}</style></head><body><canvasclass="canvas"></canvas><scriptsrc="pixi_5.3.4.min.js"></script><scriptsrc="Stats.min.js"></script><script>(asyncfunction(){conststats=newStats()document.body.appendChild(stats.domElement)letpageWidth=0letpageHeight=0letclockHour1,clockHour2letclockMin1,clockMin2letclockSec1,clockSec2const$canvas=document.querySelector('canvas')constrenderer=newPIXI.Renderer({view:$canvas,width:pageWidth,height:pageHeight,transparent:true,autoDensity:true,antialias:true})//人体时钟classClockextendsPIXI.Container{constructor(name){super()consttextures=loader.resources[honeHoneClockJson].texturesletframes=[]letaniData=[]if(this.frames){frames=this.framesaniData=this.aniData}else{aniData=[{prefix:'0',count:6,frameFrom:-1,frameTo:-1,},{prefix:'1',count:9,frameFrom:-1,frameTo:-1,},{prefix:'2',count:7,frameFrom:-1,frameTo:-1,},{prefix:'3',count:6,frameFrom:-1,frameTo:-1,},{prefix:'4',count:9,frameFrom:-1,frameTo:-1,},{prefix:'5',count:14,frameFrom:-1,frameTo:-1,},{prefix:'6',count:7,frameFrom:-1,frameTo:-1,},{prefix:'7',count:10,frameFrom:-1,frameTo:-1,},{prefix:'8',count:7,frameFrom:-1,frameTo:-1,},{prefix:'9',count:9,frameFrom:-1,frameTo:-1,},]letk=0for(leti=0;i<aniData.length;i++){constdata=aniData[i]data.frameFrom=kfor(letj=1;j<=data.count;j++){k++frames.push(textures[`${data.prefix}(${j}).png`])}data.frameTo=k-1}this.frames=framesthis.aniData=aniData}constani=newPIXI.AnimatedSprite(frames)ani.anchor.set(0.5,1)ani.animationSpeed=0.4this.stopAt=-1ani.onFrameChange=()=>{if(ani.currentFrame===this.stopAt){ani.stop()}}this.addChild(ani)this.name=namethis.ani=anithis.num=-1}setnumber(number){if(this.num!==number){this.num=numberthis.stopAt=this.aniData[number].frameTothis.ani.gotoAndPlay(this.aniData[number].frameFrom)}}}conststage=newPIXI.Container()stage.name='stage'letclockWrapconstticker=newPIXI.Ticker()letnow=newDate()letlastTime=now.getTime()constloop=function(){stats.begin()now=newDate()if(now.getTime()-lastTime>=1000){lethours=now.getHours()if(hours>9){clockHour1.number=Math.floor(hours/10)clockHour2.number=hours%10}else{clockHour1.number=0clockHour2.number=hours}letminutes=now.getMinutes()if(minutes>9){clockMin1.number=Math.floor(minutes/10)clockMin2.number=minutes%10}else{clockMin1.number=0clockMin2.number=minutes}letseconds=now.getSeconds()if(seconds>9){clockSec1.number=Math.floor(seconds/10)clockSec2.number=seconds%10}else{clockSec1.number=0clockSec2.number=seconds}lastTime=now.getTime()}renderer.render(stage)stats.end()}ticker.add(loop)consthoneHoneClockJson='HoneHoneClock.json'constloader=newPIXI.Loader()loader.add([honeHoneClockJson])loader.onComplete.add(async(res)=>{clockWrap=newPIXI.Container()clockWrap.position.set((pageWidth-630)*0.5,(pageHeight+150)*0.5)clockHour1=newClock('hour')clockHour2=newClock('hour')clockMin1=newClock('min')clockMin2=newClock('min')clockSec1=newClock('sec')clockSec2=newClock('sec')clockHour1.position.set(0,0)clockHour2.position.set(100,0)clockMin1.position.set(250,0)clockMin2.position.set(350,0)clockSec1.position.set(500,0)clockSec2.position.set(600,0)clockWrap.addChild(clockHour1)clockWrap.addChild(clockHour2)clockWrap.addChild(clockMin1)clockWrap.addChild(clockMin2)clockWrap.addChild(clockSec1)clockWrap.addChild(clockSec2)stage.addChild(clockWrap)//开始动画循环ticker.start()})loader.load()constonResize=(e)=>{pageWidth=document.body.clientWidthpageHeight=document.body.clientHeightif(clockWrap){clockWrap.position.set((pageWidth-630)*0.5,(pageHeight+150)*0.5)}renderer.resize(pageWidth,pageHeight)}onResize()window.onresize=onResize})()</script></body></html>
读到这里,这篇“如何使用canvas实现人体时钟效果”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。