Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
body { background: hsl(0,0%,9%); margin: 0; } canvas { position: absolute; top: 50%; left: 50%; /* double the stretch then scale in half to preserve responsiveness and image sharpness in retina */ max-width: 200%; max-height: 200%; transform: translate(-50%,-50%) scale(0.5); }
JavaScript
window.addEventListener("load",app); function app() { var C = document.querySelector("canvas"), c = C.getContext("2d"), S = 2, W = C.width, H = C.height; C.width = W * S; C.height = H * S; c.scale(S,S); var arrowSize = 80, arrowPoints = [ // points relative to center {x: -0.25, y: -0.5}, {x: 0.25, y: -0.5}, {x: 0.25, y: 0}, {x: 0.5, y: 0}, {x: 0, y: 0.5}, {x: -0.5, y: 0}, {x: -0.25, y: 0}, {x: -0.25, y: -0.5} ], cols = 6, rows = 5, colorA = "hsl(0,0%,14%)", colorB = "hsl(0,0%,86%)", step = 0, maxSteps = 180, phase = 0, turnPoint = maxSteps / 2, toBezierCurve = t => { let y1 = 0, y2 = 0, y3 = 1, y4 = 1, cY = 3 * (y2 - y1), bY = 3 * (y3 - y2) - cY, aY = y4 - y1 - cY - bY, y = (aY * t**3) + (bY * t**2) + (cY * t) + y1; return y; }, updateArrows = () => { let isPhase1 = phase == 1, progress = (step % turnPoint) / turnPoint, angle = toBezierCurve(progress) * 180; if (isPhase1) angle = 360 - angle; // determine background fill c.fillStyle = isPhase1 ? colorB : colorA; c.fillRect(0,0,W,H); // then arrow color c.fillStyle = isPhase1 ? colorA : colorB; // draw each arrow for (let row = -1; row <= rows; ++row) { for (let col = 0; col < cols; ++col) { let halfArrow = arrowSize/2, center = { x: arrowSize * col, y: halfArrow + arrowSize * row + (step/maxSteps * arrowSize) }; if (isPhase1) { center.x += halfArrow; center.y -= halfArrow; } c.save(); c.beginPath(); c.translate(center.x,center.y); c.rotate(angle * Math.PI/180); arrowPoints.forEach((e,i) => { let point = { x: arrowSize * e.x, y: arrowSize * e.y }; if (i == 0) c.moveTo(point.x,point.y); else c.lineTo(point.x,point.y); }); c.fill(); c.translate(-center.x,-center.y); c.closePath(); c.restore(); } } // animation progress step += 1; if (step >= maxSteps) step = 0; phase = step >= turnPoint ? 1 : 0; }, render = () => { updateArrows(); requestAnimationFrame(render); }; render(); }
粒子
时间
文字
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号