overview.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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>Tween parameters - Overview</title>
  7. <link rel="stylesheet" href="../demo.css">
  8. <style>
  9. .track {
  10. position: relative;
  11. height: 1px;
  12. background: #262626;
  13. margin: 18px 0 8px;
  14. }
  15. .lane {
  16. display: flex;
  17. align-items: center;
  18. justify-content: space-between;
  19. gap: 14px;
  20. padding: 14px 0;
  21. border-bottom: 1px solid #202020;
  22. }
  23. .lane:last-child { border-bottom: none; }
  24. .dot {
  25. width: 16px;
  26. height: 16px;
  27. border-radius: 4px;
  28. background: var(--highlight-color);
  29. will-change: transform;
  30. }
  31. .dot.orange { background: var(--accent-color); }
  32. .dot.gray { background: #666; }
  33. .meta {
  34. width: 240px;
  35. min-width: 240px;
  36. color: #bdbdbd;
  37. font-size: 13px;
  38. line-height: 1.35;
  39. }
  40. .meta strong { color: #fff; font-weight: 700; }
  41. .meta code { font-size: 12px; }
  42. </style>
  43. </head>
  44. <body>
  45. <div class="container">
  46. <div class="page-top">
  47. <div class="crumb">ANIMATION › TWEEN PARAMETERS</div>
  48. <div class="since">SINCE 1.0.0</div>
  49. </div>
  50. <h1>Tween parameters</h1>
  51. <p class="description">
  52. 这组参数决定动画<strong>怎么播放</strong>:多久开始、跑多快、怎么缓动、循环几次、结束时停在哪…<br>
  53. 在 <code class="inline">xjs(target).animate({...})</code> 里,它们跟“要动的属性”写在同一个对象里。
  54. </p>
  55. <h2>核心参数一览</h2>
  56. <p>
  57. 支持的常用项:<code class="inline">duration</code>、<code class="inline">delay</code>、<code class="inline">endDelay</code>、
  58. <code class="inline">easing</code>、<code class="inline">direction</code>、<code class="inline">loop</code>、
  59. <code class="inline">autoplay</code>、<code class="inline">fill</code>。
  60. 其中 <code class="inline">easing</code> 还支持 <strong>spring</strong>(对象形式)。
  61. </p>
  62. <div class="box-container">
  63. <div class="box-header">
  64. <div class="box-title">Quick overview</div>
  65. <div class="box-right">
  66. <button class="icon-btn" type="button" title="Copy" onclick="DocPage.copyActiveCode()" aria-label="Copy code">
  67. <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
  68. <rect x="9" y="9" width="13" height="13" rx="2"></rect>
  69. <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
  70. </svg>
  71. </button>
  72. <div class="tabs" role="tablist" aria-label="Code tabs">
  73. <div class="tab active" role="tab" aria-selected="true" tabindex="0" onclick="DocPage.switchTab('js')">JavaScript</div>
  74. <div class="tab" role="tab" aria-selected="false" tabindex="-1" onclick="DocPage.switchTab('html')">HTML</div>
  75. <div class="tab" role="tab" aria-selected="false" tabindex="-1" onclick="DocPage.switchTab('css')">CSS</div>
  76. </div>
  77. </div>
  78. </div>
  79. <div id="js-code" class="code-view active">
  80. <span class="fun">xjs</span><span class="punc">(</span><span class="str">'.dot'</span><span class="punc">)</span>.<span class="fun">animate</span><span class="punc">({</span>
  81. x<span class="punc">:</span> <span class="str">'18rem'</span><span class="punc">,</span>
  82. duration<span class="punc">:</span> <span class="num">900</span><span class="punc">,</span>
  83. delay<span class="punc">:</span> <span class="num">120</span><span class="punc">,</span>
  84. easing<span class="punc">:</span> <span class="str">'ease-out'</span><span class="punc">,</span>
  85. direction<span class="punc">:</span> <span class="str">'alternate'</span><span class="punc">,</span>
  86. loop<span class="punc">:</span> <span class="num">2</span><span class="punc">,</span>
  87. endDelay<span class="punc">:</span> <span class="num">200</span><span class="punc">,</span>
  88. fill<span class="punc">:</span> <span class="str">'forwards'</span>
  89. <span class="punc">}</span><span class="punc">)</span><span class="punc">;</span>
  90. </div>
  91. <div id="html-code" class="html-view">
  92. <span class="tag">&lt;div</span> <span class="attr">class</span>=<span class="val">"lane"</span><span class="tag">&gt;</span>
  93. <span class="tag">&lt;div</span> <span class="attr">class</span>=<span class="val">"meta"</span><span class="tag">&gt;</span>...<span class="tag">&lt;/div&gt;</span>
  94. <span class="tag">&lt;div</span> <span class="attr">class</span>=<span class="val">"dot"</span><span class="tag">&gt;&lt;/div&gt;</span>
  95. <span class="tag">&lt;/div&gt;</span>
  96. </div>
  97. <pre id="css-code" class="css-view">.dot { width: 16px; height: 16px; border-radius: 4px; background: var(--highlight-color); }
  98. .dot.orange { background: var(--accent-color); }
  99. .dot.gray { background: #666; }</pre>
  100. <div class="feature-desc">
  101. <strong>这组最想让你记住的点:</strong>
  102. <br>1) 参数和属性写在同一个对象里(上面代码里 <code class="inline">x</code> 是属性,其余是播放参数)。
  103. <br>2) 不会写也没关系:先只写 <code class="inline">duration</code> + <code class="inline">easing</code>,就已经很好玩了。
  104. <br>3) 想要“弹簧手感”?把 <code class="inline">easing</code> 写成对象即可(后面有 spring 专门页面)。
  105. </div>
  106. <div class="demo-visual">
  107. <div class="lane">
  108. <div class="meta"><strong>默认</strong><br><code class="inline">duration: 900</code> <code class="inline">ease-out</code></div>
  109. <div class="dot"></div>
  110. </div>
  111. <div class="lane">
  112. <div class="meta"><strong>更慢</strong><br><code class="inline">duration: 1600</code> <code class="inline">ease-in-out</code></div>
  113. <div class="dot orange"></div>
  114. </div>
  115. <div class="lane">
  116. <div class="meta"><strong>更“复读机”</strong><br><code class="inline">loop: 3</code> <code class="inline">alternate</code></div>
  117. <div class="dot gray"></div>
  118. </div>
  119. <div class="track" aria-hidden="true"></div>
  120. </div>
  121. <div class="action-bar">
  122. <button class="play-btn" onclick="runDemo()">REPLAY</button>
  123. </div>
  124. </div>
  125. <div class="doc-nav" aria-label="Previous and next navigation">
  126. <a href="#" onclick="goPrev(); return false;">
  127. <span>
  128. <span class="nav-label">Previous</span><br>
  129. <span id="prev-title" class="nav-title">—</span>
  130. </span>
  131. <span aria-hidden="true">←</span>
  132. </a>
  133. <div id="nav-center" class="nav-center">Tween parameters</div>
  134. <a href="#" onclick="goNext(); return false;">
  135. <span>
  136. <span class="nav-label">Next</span><br>
  137. <span id="next-title" class="nav-title">—</span>
  138. </span>
  139. <span aria-hidden="true">→</span>
  140. </a>
  141. </div>
  142. </div>
  143. <div id="toast" class="toast" role="status" aria-live="polite"></div>
  144. <script src="../page_utils.js"></script>
  145. <script src="../../xjs.js"></script>
  146. <script>
  147. const CURRENT = 'tween_parameters/overview.html';
  148. function resetDots() {
  149. document.querySelectorAll('.dot').forEach(el => el.style.transform = 'none');
  150. }
  151. function runDemo() {
  152. resetDots();
  153. const dots = document.querySelectorAll('.dot');
  154. xjs(dots[0]).animate({ x: '18rem', duration: 900, easing: 'ease-out' });
  155. xjs(dots[1]).animate({ x: '18rem', duration: 1600, easing: 'ease-in-out' });
  156. xjs(dots[2]).animate({ x: '18rem', duration: 700, easing: 'linear', loop: 3, direction: 'alternate' });
  157. }
  158. function goPrev() { window.parent?.docNavigatePrev?.(CURRENT); }
  159. function goNext() { window.parent?.docNavigateNext?.(CURRENT); }
  160. DocPage.enableTabKeyboardNav();
  161. DocPage.syncMiddleActive(CURRENT);
  162. DocPage.syncPrevNext(CURRENT);
  163. setTimeout(runDemo, 300);
  164. </script>
  165. </body>
  166. </html>