|
|
本帖最后由 起个网名好难 于 2024-10-31 07:42 编辑
- <style>
- :root {--fState:running}
- .sBall { filter: drop-shadow(-2px -2px 4px darkred); transition: .4s; cursor: pointer; animation: flash .2s var(--fDelay) linear infinite alternate var(--fState); }
- .sBall:hover { r: 30; }
- @keyframes flash { to { opacity: .5; } }
- </style>
- <div id="heart" style="width:250px;height:200px;margin:auto;">
- </div>
- <script>
- function genTagObj(parentNode, jsonData) {
- let sObj = document.createElementNS("http://www.w3.org/2000/svg",jsonData.tag);
- for (let key in jsonData) {
- if(key === 'tag') {
- continue;
- }
- else if (jsonData.hasOwnProperty(key)) {
- sObj.setAttribute(key, jsonData[key]);
- }
- }
- console.log(document);
- if(parentNode) parentNode.appendChild(sObj);
- else document.body.appendChild(sObj);
- return sObj;
- }
- let mysvg = genTagObj(heart,{'tag':'svg','xmlns':"http://www.w3.org/2000/svg", 'viewBox':'0 0 800 800'});
- let path = genTagObj(mysvg,{'tag':'path','d':'M30 200 A 175 150 0 0 1 400 200 A 175 150 0 0 1 770 200 Q 800 600 400 750 Q 0 600 30 200','fill':'none','stroke':'none','id':'path'});
- let numPoints = 30 , delta = path.getTotalLength() / numPoints;
- for(let i = 0 ; i < numPoints; i ++) {
- let point = path.getPointAtLength(delta * i);
- let color = '#' + Math.random().toString(16).substring(2,8);
- let fDelay = Math.random() * i * -0.1;
- genTagObj(mysvg,{'tag':'circle','cx':`${point.x}`,'cy':`${point.y}`,'r':20,'class':'sBall', 'fill':`${color}`, 'style':`--fDelay: ${fDelay}s`});
- }
-
- </script>
复制代码 |
|