test_svg_attributes.html 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>SVG Attributes - Animal.js</title>
  7. <link rel="stylesheet" href="../demo.css">
  8. <style>
  9. .demo-visual {
  10. padding: 26px 30px;
  11. background: #151515;
  12. display: grid;
  13. grid-template-columns: 1fr 280px;
  14. gap: 16px;
  15. }
  16. .stage {
  17. background: rgba(0,0,0,0.25);
  18. border: 1px solid #262626;
  19. border-radius: 12px;
  20. padding: 14px;
  21. overflow: hidden;
  22. min-height: 240px;
  23. display: grid;
  24. place-items: center;
  25. }
  26. .panel {
  27. background: rgba(0,0,0,0.18);
  28. border: 1px solid #262626;
  29. border-radius: 12px;
  30. padding: 14px;
  31. display: flex;
  32. flex-direction: column;
  33. gap: 12px;
  34. }
  35. svg { width: 100%; height: 100%; max-height: 280px; }
  36. .circle {
  37. fill: rgba(255,159,67,0.2);
  38. stroke: var(--accent-color);
  39. stroke-width: 2;
  40. }
  41. .circle.blue {
  42. fill: rgba(48,133,214,0.2);
  43. stroke: #3085d6;
  44. }
  45. </style>
  46. </head>
  47. <body>
  48. <div class="container">
  49. <div class="page-top">
  50. <div class="crumb">ANIMATION › SVG</div>
  51. <div class="since">SINCE 1.0.0</div>
  52. </div>
  53. <h1>SVG 属性动画 (Attributes)</h1>
  54. <p class="description">直接通过属性名动画 SVG 特有属性,如 <code class="inline">r</code>, <code class="inline">cx</code>, <code class="inline">cy</code>, <code class="inline">width</code>, <code class="inline">rx</code> 等。</p>
  55. <div class="box-container">
  56. <div class="box-header">
  57. <div class="box-title">SVG Attributes code example</div>
  58. <div class="box-right">
  59. <!-- Code copy button omitted for brevity in this generator -->
  60. </div>
  61. </div>
  62. <div id="js-code" class="code-view active">
  63. <span class="fun">xjs</span><span class="punc">(</span><span class="str">'#c1'</span><span class="punc">)</span>.<span class="fun">animate</span><span class="punc">({</span>
  64. r<span class="punc">:</span> <span class="punc">[</span><span class="num">20</span><span class="punc">,</span> <span class="num">50</span><span class="punc">]</span><span class="punc">,</span>
  65. cx<span class="punc">:</span> <span class="punc">[</span><span class="num">100</span><span class="punc">,</span> <span class="num">150</span><span class="punc">]</span><span class="punc">,</span>
  66. duration<span class="punc">:</span> <span class="num">1000</span><span class="punc">,</span>
  67. direction<span class="punc">:</span> <span class="str">'alternate'</span><span class="punc">,</span>
  68. loop<span class="punc">:</span> <span class="kwd">true</span>
  69. <span class="punc">}</span><span class="punc">)</span><span class="punc">;</span>
  70. </div>
  71. <div class="demo-visual">
  72. <div class="stage">
  73. <svg viewBox="0 0 320 200">
  74. <circle id="c1" class="circle" cx="100" cy="100" r="20" />
  75. <circle id="c2" class="circle blue" cx="220" cy="100" r="30" />
  76. </svg>
  77. </div>
  78. <div class="panel">
  79. <button class="play-btn" onclick="runDemo()">REPLAY</button>
  80. </div>
  81. </div>
  82. </div>
  83. <script src="../page_utils.js"></script>
  84. <script src="../../xjs.js"></script>
  85. <script>
  86. function runDemo() {
  87. xjs('#c1').animate({
  88. r: [20, 50],
  89. cx: [100, 160],
  90. duration: 1200,
  91. direction: 'alternate',
  92. loop: true,
  93. easing: 'ease-in-out'
  94. });
  95. xjs('#c2').animate({
  96. r: [30, 10],
  97. cy: [100, 150],
  98. duration: 1200,
  99. direction: 'alternate',
  100. loop: true,
  101. easing: 'ease-in-out',
  102. delay: 100
  103. });
  104. }
  105. setTimeout(runDemo, 320);
  106. </script>
  107. </div>
  108. </body>
  109. </html>