前端最终规范


数字滚动

<pre><code class="language-markdown">来源 https://juejin.cn/post/6986453616517185567 &lt;template&gt; &lt;component :is="as" class="scroll-num" :style="{ '--i': i, '--delay': delay }" &gt; &lt;ul ref="ul"&gt; &lt;li&gt;0&lt;/li&gt; &lt;li&gt;1&lt;/li&gt; &lt;li&gt;2&lt;/li&gt; &lt;li&gt;3&lt;/li&gt; &lt;li&gt;4&lt;/li&gt; &lt;li&gt;5&lt;/li&gt; &lt;li&gt;6&lt;/li&gt; &lt;li&gt;7&lt;/li&gt; &lt;li&gt;8&lt;/li&gt; &lt;li&gt;9&lt;/li&gt; &lt;li&gt;0&lt;/li&gt; &lt;/ul&gt; &lt;svg width="0" height="0"&gt; &lt;filter id="blur"&gt; &lt;feGaussianBlur in="SourceGraphic" :stdDeviation="`0 ${blur}`" /&gt; &lt;/filter&gt; &lt;/svg&gt; &lt;/component&gt; &lt;/template&gt; &lt;script&gt; export default { name: 'ScrollNum', props: { as: { type: String, default: 'div' }, i: { type: Number, default: 0, validator: v =&gt; v &lt; 10 &amp;&amp; v &gt;= 0 &amp;&amp; Number.isInteger(v) }, delay: { type: Number, default: 1 }, blur: { type: Number, default: 2 } }, data: () =&gt; ({ timer: null }), mounted () { const ua = navigator.userAgent.toLowerCase() const testUA = regexp =&gt; regexp.test(ua) const isSafari = testUA(/safari/g) &amp;&amp; !testUA(/chrome/g) // Safari浏览器的兼容代码 isSafari &amp;&amp; (this.timer = setTimeout(() =&gt; { this.$refs.ul.setAttribute('style', ` animation: none; transform: translateY(calc(var(--i) * -9.09%)) `) }, this.delay * 1000)) }, beforeDestroy () { clearTimeout(this.timer) } } &lt;/script&gt; &lt;style scoped&gt; .scroll-num { width: var(--width, 20px); height: var(--height, calc(var(--width, 20px) * 1.8)); color: var(--color, #333); font-size: var(--height, calc(var(--width, 20px) * 1.1)); line-height: var(--height, calc(var(--width, 20px) * 1.8)); text-align: center; overflow: hidden; animation: enhance-bounce-in-down 1s calc(var(--delay) * 1s) forwards; } ul { /* padding: 0; margin: 0; list-style: none; */ animation: move .3s linear infinite, bounce-in-down 1s calc(var(--delay) * 1s) forwards } @keyframes move { from { transform: translateY(-90%); filter: url(#blur) } to { transform: translateY(1%); filter: url(#blur) } } @keyframes bounce-in-down { from { transform: translateY(calc(var(--i) * -9.09% - 7%)); filter: none } 25% { transform: translateY(calc(var(--i) * -9.09% + 3%)) } 50% { transform: translateY(calc(var(--i) * -9.09% - 1%)) } 70% { transform: translateY(calc(var(--i) * -9.09% + .6%)) } 85% { transform: translateY(calc(var(--i) * -9.09% - .3%)) } to { transform: translateY(calc(var(--i) * -9.09%)) } } @keyframes enhance-bounce-in-down { 25% { transform: translateY(8%) } 50% { transform: translateY(-4%) } 70% { transform: translateY(2%) } 85% { transform: translateY(-1%) } to { transform: translateY(0) } } &lt;/style&gt; </code></pre>

页面列表

ITEM_HTML