Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
css
BODY { background: #000; } .svg-fulscreen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; transform: translateZ(200px); } .heart__fill-circle { transform-origin: 400px 300px; -webkit-animation: rotation 17s infinite alternate; animation: rotation 17s infinite alternate; } .heart__fill-circle:nth-child(6n+1) { -webkit-animation-delay: -2s; animation-delay: -2s; } .heart__fill-circle:nth-child(6n+2) { -webkit-animation-delay: -1s; animation-delay: -1s; } .heart__fill-circle:nth-child(6n+3) { -webkit-animation-delay: -2.5s; animation-delay: -2.5s; } .heart__fill-circle:nth-child(6n+4) { -webkit-animation-delay: -0.5s; animation-delay: -0.5s; } .heart__fill-circle:nth-child(6n+5) { -webkit-animation-delay: -1.5s; animation-delay: -1.5s; } @-webkit-keyframes rotation { 0% { transform: rotate(0); } 50% { transform: rotate(180deg); } 100% { transform: rotate(360deg); } } @keyframes rotation { 0% { transform: rotate(0); } 50% { transform: rotate(180deg); } 100% { transform: rotate(360deg); }
JavaScript
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; const circlesGroup = document.querySelector('.heart__fill-circles-group'); const circlesElems = document.querySelectorAll('.heart__mask-circle'); const circles = []; const groupAnimatedClass = 'heart__fill-circles-group--animated'; const pathLength = 350; const maxSteps = 80; const maxR = 50; const rStep = maxR / maxSteps; const Circle = function({elem, direction, delay}) { this.elem = elem; this.direction = direction; this.delay = delay; this.resetValues(); }; Circle.prototype.resetValues = function() { const angleDeg = Math.round(Math.random() * 360); const angleRad = angleDeg * Math.PI/180; this.x = pathLength * Math.sin(angleRad); // c * sin(B) this.y = pathLength * Math.cos(angleRad); // c * cos(B) this.xStep = this.x / maxSteps; this.yStep = this.y / maxSteps; this.currentStep = maxSteps / 4.5; }; Circle.prototype.changeProp = function() { let x = this.xStep * this.currentStep; let y = this.yStep * this.currentStep; if(this.direction === 1) { // right top y *= -1; } else if(this.direction === 2) { // right bottom // make nothing } else if(this.direction === 3) { // left bottom x *= -1; } else if(this.direction === 4) { // left top x *= -1; y *= -1; } this.currentStep++; this.elem.setAttribute('transform', `translate(${x}, ${y})`); this.elem.setAttribute('r', (Math.abs(maxSteps - this.currentStep)) * rStep); if(this.currentStep >= maxSteps) { this.resetValues(); } requestAnimationFrame(() => { this.changeProp(); }); }; function setInitial() { circles.forEach(circle => { circle.elem.setAttribute('transform', `translate(0, 0)`); circle.elem.setAttribute('r', maxR); }) }; const runAnimation = () => { circles.forEach((circle, i) => { setTimeout(() => { circle.resetValues(); circle.changeProp(); }, circle.delay); }) }; const prepareCircles = () => { circlesElems.forEach((elem, i) => { const direction = Math.floor(Math.random() * 4) + 1; const circle = new Circle({ elem, direction, delay: i * 100 }); circles.push(circle); }); } // ------------------------------ prepareCircles(); requestAnimationFrame(runAnimation);
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>svg 心动画-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号