1- import { useState , useEffect , useRef , useMemo , useCallback , h , memo , render } from "../../src/index"
1+ import { useState , memo , h , render , useEffect } from "../../src/index"
22
3- // 注入样式
3+ // 注入样式(包含CSS动画)
44const styleSheet = document . createElement ( "style" )
55styleSheet . textContent = `
66.container {
@@ -11,6 +11,14 @@ styleSheet.textContent = `
1111 width: 10px;
1212 height: 10px;
1313 background: #eee;
14+ animation: scaleAnimation 10s linear infinite;
15+ transform: translateZ(0);
16+ }
17+
18+ @keyframes scaleAnimation {
19+ 0% { transform: scaleX(0.476) scaleY(0.7); } /* 1/2.1 ≈ 0.476 */
20+ 50% { transform: scaleX(0.905) scaleY(0.7); } /* (1+0.9)/2.1 ≈ 0.905 */
21+ 100% { transform: scaleX(0.476) scaleY(0.7); }
1422}
1523
1624.dot {
@@ -23,32 +31,27 @@ styleSheet.textContent = `
2331`
2432document . head . appendChild ( styleSheet )
2533
26- // Dot 组件
27- const Dot = memo ( ( { x, y, size, text } ) => {
34+ const SlowDot = memo ( ( { x, y, size, text } ) => {
2835 const [ hover , setHover ] = useState ( false )
29-
30- const dotStyle = useMemo ( ( ) => {
31- const s = size * 1.3
32- return {
33- width : `${ s } px` ,
34- height : `${ s } px` ,
35- left : `${ x } px` ,
36- top : `${ y } px` ,
37- borderRadius : `${ s / 2 } px` ,
38- lineHeight : `${ s } px` ,
39- background : hover ? "#ff0" : "#61dafb"
40- }
41- } , [ x , y , size , hover ] )
42-
43- const handleMouseEnter = useCallback ( ( ) => setHover ( true ) , [ ] )
44- const handleMouseLeave = useCallback ( ( ) => setHover ( false ) , [ ] )
36+ const start = performance . now ( )
37+ while ( performance . now ( ) - start < 2 ) { } // here
38+
39+ const dotStyle = {
40+ width : `${ size * 1.3 } px` ,
41+ height : `${ size * 1.3 } px` ,
42+ left : `${ x } px` ,
43+ top : `${ y } px` ,
44+ borderRadius : `${ size * 1.3 / 2 } px` ,
45+ lineHeight : `${ size * 1.3 } px` ,
46+ background : hover ? "#ff0" : "#61dafb"
47+ }
4548
4649 return (
4750 < div
4851 className = "dot"
4952 style = { dotStyle }
50- onMouseEnter = { handleMouseEnter }
51- onMouseLeave = { handleMouseLeave }
53+ onMouseEnter = { ( ) => setHover ( true ) }
54+ onMouseLeave = { ( ) => setHover ( false ) }
5255 >
5356 { hover ? `*${ text } *` : text }
5457 </ div >
@@ -58,7 +61,6 @@ const Dot = memo(({ x, y, size, text }) => {
5861// Sierpinski 三角形组件
5962const targetSize = 25
6063
61- // 同步计算
6264const getValue = ( key , kid ) => {
6365 const number = kid . props . nodeValue
6466 return number
@@ -69,7 +71,7 @@ const SierpinskiTriangle = memo(({ x, y, s, children }) => {
6971
7072 if ( s <= targetSize ) {
7173 return (
72- < Dot
74+ < SlowDot
7375 x = { x - targetSize / 2 }
7476 y = { y - targetSize / 2 }
7577 size = { targetSize }
@@ -95,39 +97,23 @@ const SierpinskiTriangle = memo(({ x, y, s, children }) => {
9597 )
9698} )
9799
98- // 主应用组件(移除 forwardRef)
100+ // 主应用组件
99101const App = ( ) => {
100102 const [ seconds , setSeconds ] = useState ( 0 )
101- const [ elapsed , setElapsed ] = useState ( 0 )
102- const startTime = useRef ( new Date ( ) . getTime ( ) )
103103
104- // 定时器逻辑
104+ // 仅更新秒数
105105 useEffect ( ( ) => {
106- // 更新秒数
107- const secondInterval = setInterval ( ( ) => {
108- setSeconds ( ( prev ) => ( prev % 10 ) + 1 )
106+ const timer = setInterval ( ( ) => {
107+ setSeconds ( prev => ( prev % 10 ) + 1 )
109108 } , 1000 )
110-
111- // 更新动画时间
112- const frameInterval = setInterval ( ( ) => {
113- setElapsed ( new Date ( ) . getTime ( ) - startTime . current )
114- } , 16 )
115-
116- return ( ) => {
117- clearInterval ( secondInterval )
118- clearInterval ( frameInterval )
119- }
109+
110+ return ( ) => clearInterval ( timer )
120111 } , [ ] )
121112
122- // 计算缩放变换
123- const t = ( elapsed / 1000 ) % 10
124- const scale = 1 + ( t > 5 ? 10 - t : t ) / 10
125- const transform = `scaleX(${ scale / 2.1 } ) scaleY(0.7) translateZ(0.1px)`
126-
127113 return (
128114 < div >
129115 < h1 > Fre Time Slicing</ h1 >
130- < div className = "container" style = { { transform } } >
116+ < div className = "container" >
131117 < SierpinskiTriangle x = { 0 } y = { 0 } s = { 1000 } >
132118 { seconds }
133119 </ SierpinskiTriangle >
0 commit comments