Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
JavaScript
"use strict"; // Paul Slaymaker, paul25882@gmail.com const body=document.getElementsByTagName("body").item(0); body.style.background="black"; body.style.margin=0; const TP=2*Math.PI; var CSIZEX=600; var CSIZEY=600; var createContext=()=>{ let c=document.createElement("canvas"); c.width=2*CSIZEX; c.height=2*CSIZEY; c.style.position="absolute"; c.style.top="0px"; c.style.left="0px"; let context=c.getContext("2d"); return context; } const ctx=createContext(); const ctx2=createContext(); var container=(()=>{ let co=document.createElement("div"); co.append(ctx2.canvas); co.append(ctx.canvas); body.append(co); return co; })(); onresize=function() { CSIZEX=Math.round(window.innerWidth/2)-4; CSIZEY=Math.round(window.innerHeight/2)-4; ctx.canvas.width=2*CSIZEX; ctx.canvas.height=2*CSIZEY; ctx.translate(CSIZEX,CSIZEY); ctx2.canvas.width=2*CSIZEX; ctx2.canvas.height=2*CSIZEY; ctx2.translate(CSIZEX,CSIZEY); setPoints(); setColors(); idx=0; ctx.lineWidth=3; ctx.fillStyle="red"; } var getRandomInt=(min,max,low)=>{ if (low) { return Math.floor(Math.random()*Math.random()*(max-min))+min; } else { return Math.floor(Math.random()*(max-min))+min; } } function Point(x,y,d,n,r) { this.x=x; this.y=y; this.d=d; this.n=n; this.r=r; } var points=[]; var pExist=(p)=>{ for (let i=0; i
{ const ro1=[0,TP/3,2*TP/3]; const ro2=[TP/6,TP/2,5*TP/6]; let ro=p.d?ro2:ro1; // rotation angles let d=(p.d+1)%2; // direction let a=[0,1,2,3]; // distance selection array if (p.n<2) { if (p.d) a.forEach((ma,i)=>{ a[i]=(ma+3)%4; }); // 3 else a.forEach((ma,i)=>{ a[i]=(ma+1)%4; }); // 1 } else { if (p.d) a.forEach((ma,i)=>{ a[i]=(ma+1)%4; }); // 1 else a.forEach((ma,i)=>{ a[i]=(ma+3)%4; }); // 3 } a.splice(a.indexOf(p.n),1); if (p.n%2==1) a.reverse(); let idc=[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]][getRandomInt(0,6)]; for (let ac=0; ac
CSIZEX+40) continue; let y=p.y+r*Math.sin(ro[i]); if (Math.abs(y)>CSIZEY+40) continue; let point=new Point(x,y,d,a[i],di[a[i]]); if (pExist(point)) continue; points.push(point); addPoints(point); } } var randomizeDistances=()=>{ let ratio=1; let count=0; do { di=[ getRandomInt(16,80,getRandomInt(0,2)), getRandomInt(16,80,getRandomInt(0,2)), getRandomInt(16,80,getRandomInt(0,2)), getRandomInt(16,80,getRandomInt(0,2)), getRandomInt(16,80,getRandomInt(0,2)) ]; ratio=di.reduce(function(a,b) { return Math.max(a,b); })/di.reduce(function(a,b) { return Math.min(a,b); }); count++; } while(ratio>3.3); console.log(count+" "+ratio); } var setPoints=()=>{ randomizeDistances(); points=[new Point(0,0,0,0,di[0])]; addPoints(points[0]); } var colors=[]; var mcolor="yellow"; var dcolor="black"; var dcolor2="black"; var setColors=()=>{ for (let i=0; i<4; i++) { colors[i]=["hsl("+getRandomInt(0,360)+",90%,60%)"]; } mcolor="hsl("+getRandomInt(0,360)+",100%,50%)"; dcolor=["#000","#122","#244","#333"][getRandomInt(0,4)]; dcolor="hsl(0,0%,"+getRandomInt(0,30,true)+"%)"; dcolor2="hsl(0,0%,"+getRandomInt(0,30,true)+"%)"; } var drawZ=(i)=>{ let dp=new Path2D(); let dpc=new Path2D(); // ctx.beginPath(); dp.moveTo(points[i].x+points[i].r,points[i].y); dp.arc(points[i].x,points[i].y,points[i].r,0,TP); dpc.moveTo(points[i].x+points[i].r-8,points[i].y); dpc.arc(points[i].x,points[i].y,points[i].r-8,0,TP); ctx2.lineWidth=20; ctx2.strokeStyle=mcolor; ctx2.stroke(dp); ctx.lineWidth=12; ctx.strokeStyle=dcolor; ctx.stroke(dp); ctx.strokeStyle=colors[points[i].n]; ctx.lineWidth=4; ctx.stroke(dpc); if (points[i].r>38) { ctx.beginPath(); ctx.moveTo(points[i].x+points[i].r-26,points[i].y); ctx.arc(points[i].x,points[i].y,points[i].r-26,0,TP); ctx.strokeStyle=colors[(points[i].n+1)%4]; ctx.stroke(); } if (points[i].r>58) { ctx.beginPath(); ctx.moveTo(points[i].x+points[i].r-44,points[i].y); ctx.arc(points[i].x,points[i].y,points[i].r-44,0,TP); ctx.strokeStyle=colors[(points[i].n+2)%4]; ctx.lineWidth=5; ctx.stroke(); } if (points[i].r>68) { ctx.beginPath(); ctx.arc(points[i].x,points[i].y,points[i].r-55,0,TP); ctx.strokeStyle=dcolor2; ctx.lineWidth=18; ctx.stroke(); ctx.lineWidth=4; ctx.beginPath(); ctx.arc(points[i].x,points[i].y,points[i].r-64,0,TP); ctx.strokeStyle=colors[(points[i].n+3)%4]; ctx.stroke(); } } var stopped=true; var start=()=>{ if (stopped) { stopped=false; if (pauseTS>0) requestAnimationFrame(pause); else requestAnimationFrame(animate); } else { stopped=true; } } body.addEventListener("click", start, false); var gtransform=[ (r)=>{ let d=1-r/90; return "rotateX("+r+"deg) rotateY("+r+"deg) scale("+d+")" }, (r)=>{ let d=1-r/90; return "rotateX(-"+r+"deg) rotateY("+r+"deg) scale("+d+")" }, (r)=>{ let d=1-r/90; return "rotateX("+r+"deg) rotateY(-"+r+"deg) scale("+d+")" }, (r)=>{ let d=1-r/90; return "rotateX(-"+r+"deg) rotateY(-"+r+"deg) scale("+d+")" }, ]; var pauseTS=0; var S=0; var rot=0; var GT=0; var pause=(ts)=>{ if (stopped) return; if (ts
{ if (stopped) return; if (!time) time=ts; let progress=ts-time; if (progress
points.length-1) { idx=0; pauseTS=performance.now()+3000; requestAnimationFrame(pause); } else { drawZ(idx++); requestAnimationFrame(animate); } } } onresize(); start();
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>canvas圆模式-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号