Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
html, body { margin: 0; padding: 0; overflow: hidden; background-color: #000; } .container { width: 100vw; height: 100vh; display: flex; justify-content: center; align-items: center; } .canvas { background-color: #000; }
JavaScript
const q = (sel) => document.querySelector(sel); const canvas = q('canvas'); const ctx = canvas.getContext('2d'); const PI2 = Math.PI * 2; const w = 500; const h = 500; const wh = w * 0.5; const hh = h * 0.5; let numCopies = 14; let numGroups = 5; const colorLight = '#fff'; const colorDark = '#f7f8f9'; let groupRotationInc = 0.1; let autoRotate = 0; let autoAnimate = true; let tick = 0; const map = (value, start1, stop1, start2, stop2) => ((value - start1) / (stop1 - start1)) * (stop2 - start2) + start2; const clear = () => { ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); }; const drawShape = (rotate, scaleX, scaleY) => { ctx.save(); ctx.translate(wh, hh); ctx.rotate(rotate); ctx.scale(scaleX, scaleY); ctx.lineCap = 'square'; ctx.beginPath(); ctx.fillStyle = colorLight; ctx.strokeStyle = '#bab8b8'; ctx.moveTo(0, 0); ctx.lineTo(-25, -150); ctx.lineTo(0, -180); ctx.lineTo(0, 0); ctx.fill(); ctx.stroke(); ctx.closePath(); ctx.beginPath(); ctx.fillStyle = colorDark; ctx.moveTo(0, 0); ctx.lineTo(25, -150); ctx.lineTo(0, -180); ctx.lineTo(0, 0); ctx.fill(); ctx.stroke(); ctx.closePath(); ctx.restore(); }; const drawGroup = (index, percent, scale, baseRotation) => { const rotateInc = PI2 / numCopies; const scaleX = (index % 2 === 0) ? scale : -scale; const scaleY = scale; for (let i = 0; i < numCopies; i++) { const rotate = baseRotation + (rotateInc * i); drawShape(rotate, scaleX, scaleY); } }; const loop = () => { clear(); let scale = 1; let baseRotation = autoRotate; const scaleMod = 1 / numGroups; const phase = map(Math.sin(tick), -1, 1, 0, 1); if (autoAnimate) { numGroups = 2 + (10 * phase); groupRotationInc = phase; } for (let i = 0; i < numGroups; i++) { drawGroup(i, (i + 1) / numGroups, scale, baseRotation); scale -= scaleMod; baseRotation += groupRotationInc; } autoRotate += 0.001; tick += 0.01; requestAnimationFrame(loop); }; const onPointerOver = () => { autoAnimate = false; }; const onPointerMove = (e) => { const event = (e.touches && e.touches.length) ? e.touches[0] : e; const { target, clientX: pointerX, clientY: pointerY } = event; const percX = ((pointerX - target.offsetLeft) / w); const percY = ((pointerY - target.offsetTop) / h); groupRotationInc = percX; numGroups = percY * 10; }; const onPointerLeave = () => { autoAnimate = true; groupRotationInc = 0.1; }; canvas.addEventListener('mouseenter', onPointerOver); canvas.addEventListener('touchstart', onPointerOver); canvas.addEventListener('mousemove', onPointerMove); canvas.addEventListener('touchmove', onPointerMove); canvas.addEventListener('mouseout', onPointerLeave); canvas.addEventListener('touchend', onPointerLeave); loop();
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>重复的晶体-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号