gsap.timeline({\n onUpdate: () => {\n const xml = new XMLSerializer().serializeToString(svg);\n const src = `data:image\/svg+xml;base64,${btoa(xml)}`;\n animationFrames.push(src);\n },\n onComplete: () => {\n let inc = 0;\n const renderSvgDataToCanvas = () => {\n const virtualImage = new Image();\n virtualImage.src = animationFrames[inc];\n virtualImage.onload = () => {\n ctx.clearRect(0, 0, 400, 200);\n ctx.drawImage(virtualImage, 0, 0, 400, 200);\n canvasFrames.push(canvas.toDataURL('image\/jpeg'));\n inc++;\n if (inc < animationFrames.length) {\n renderSvgDataToCanvas();\n } else {\n \/\/console.log(canvasFrames); \/\/調(diào)試用\n generateGif();\n }\n };\n };\n renderSvgDataToCanvas();\n },\n})\n.fromTo('#rect', { x: -50 }, { duration: 2, x: 350, ease: 'power.ease2' });<\/pre>\n Dengan menggunakan fungsi rekursif rendersvgdatatocanvas, saya boleh menggunakan data imej dalam array AnimationFrame untuk menulisnya ke kanvas. Kemudian, dengan menggunakan canvas.todataurl ('image\/jpeg'), saya dapat menyimpan data rasterisasi setiap bingkai animasi dalam array kanvas. <\/p>\n
Jika anda telah menambah Console.log dalam fungsi onComplete, anda harus melihat sesuatu yang serupa dengan yang berikut dalam konsol penyemak imbas. Walau bagaimanapun, masa ini perhatikan jenis MIME data: ia bukan SVG XML, tetapi Imej\/JPEG. Ini penting untuk kerja seterusnya yang akan saya lakukan. <\/p>\n
<\/p> Tukar data rasterisasi ke gif <\/h2>\n
Ini adalah langkah terakhir, yang melibatkan lulus setiap indeks array kanvas ke gif moden. <\/p>\n
\n\n\n \n Simple<\/title>\n<\/head>\n
\n \n