mapaler 2020-01-05
使用svg,把小球按照制定轨迹进行运动的代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> body { background: #fff; } .to-animate { width: 50px; height: 50px; background: green; position: absolute; top: -25px; left: -25px; border-radius: 25px; opacity: 1; } svg { position: absolute; top: 0; left: 0; width: 640px; height: 480px; display: #fff; } path { fill: none; stroke: red; } </style> </head> <body> <div class="to-animate"></div> <svg xmlns="http://www.w3.org/2000/svg" > <path d="m 227.6035,38.929859 c -17.098,-6.615379 -35.43714,-5.654746 -53.72008,-5.654746 -28.88045,0 -78.608562,23.436783 -69.27063,60.788513 8.30718,33.228734 73.51169,-17.343534 73.51169,25.446354 0,111.52514 -170.5191138,45.29238 -156.919185,154.09181 2.924851,23.39881 26.328181,58.41063 40.996904,76.33907 58.597841,71.61958 74.550601,-43.6165 130.059141,-32.51479 51.57633,10.31527 43.90688,155.47922 168.22868,115.92228 167.51141,-53.29909 -59.7547,-112.77835 8.48212,-169.64236 48.39108,-40.32591 95.07686,92.99483 193.67503,8.48212 36.29006,-31.10577 60.13025,-119.23372 -1.41369,-145.6097 C 531.50007,113.83552 494.02863,119.47348 466.5165,101.13206 447.3794,88.373995 454.4009,55.952532 431.17434,45.99829 381.32712,24.635198 348.07325,65.928309 303.94257,71.444645 274.33127,75.146057 256.00673,42.987462 227.6035,38.929859 z" /> </svg> <script> var start = performance.now(); var box = document.querySelector(‘.to-animate‘); var path = document.querySelector(‘path‘); var len = path.getTotalLength(); function frame() { var now = performance.now(); var phase = ((now - start) / 6000) % 1; var point = path.getPointAtLength(len * phase); box.style.transform = ‘translate3d(‘ + point.x + ‘px,‘ + point.y + ‘px,0)‘; // IE box.style.WebkitTransform = ‘translate3d(‘ + point.x + ‘px,‘ + point.y + ‘px,0)‘; // Chrome&Safari requestAnimationFrame(frame); } frame(); </script> </body> </html>