我想創建一個SVG動畫,但將其呈現給Canvas。我知道CanVG,但我不確定它是否滿足我的需求:在Canvas div中顯示使用javascript動畫的SVG元素,而不是「原生」SVG窗口。當我查看CanVG示例代碼時,它似乎指向一個SVG文件,而不是使用屬於同一個文件的一部分的SVG代碼,它被javascript實時處理。任何幫助?我可以將動畫SVG呈現給Canvas嗎?
回答
前段時間我也遇到過這個問題,並且嘗試了上面提到的所有可能性,遺憾的是沒有結果。經過一番研究,我發現了一種將SVG注入Canvas的方法,但有一點痛苦和額外的工作是可能的。因此,解決方案是定義svg元素,然後將其推送到數組,然後將該SVG呈現爲圖像。
這裏是一個簡短的代碼片段:
SVG部分:
var data = "data:image/svg+xml," +
"<svg xmlns='http://www.w3.org/2000/svg' width='400' height='400'>" +
"<foreignObject width='100%' height='100%'>" +
"<div xmlns='http://www.w3.org/1999/xhtml' style='font: bold 160px Myriad Pro, Arial, Helvetica, Arial, sans-serif'>" +
"<span style='color:rgb(32,124,202); opacity: 0.8; -webkit-text-stroke-color: white; -webkit-text-stroke-width: 2px'>" + letters[pos] + "</span>" +
"</div>" +
"</foreignObject>" +
"</svg>";
characters.push(data);
和JS部分:
var letters = [...] // a pool of characters
var images = new Array(letters.length);
for (var i=0; i< letters.length; i++) {
var textPosition = WIDTH/2 - (letters.length * CHAR_DISTANCE)/2;
var txt = new Text(letters[i], textPosition + (i*CHAR_DISTANCE), HEIGHT/2,
(Math.random() * 3) + 5 , (-Math.random() * 10) + 5);
images[i] = new Image();
images[i].src = characters[i];
textArray.push(txt);
}
您可以在這裏查看整個源代碼: http://hellopixel.net/experiments/404/404.html
非常有趣,謝謝!我會看看這個源代碼.. – Jackalope
有幾個庫(如CanVG)只是將SVG變成Canvas繪圖命令。動畫不會幫助你。對於動畫,你將不得不自己做。您可以嘗試使用CanVG在畫布上繪製SVG,因爲它正在進行動畫製作,使用計時器更新畫布,但這非常麻煩,除非瀏覽器還支持SVG,否則無法完成此操作(並且如果是這樣,爲什麼會你想這樣做嗎?)
如果你想實時操作 SVG,你將不得不堅持使用SVG。否則,你需要滾動全部你自己的狀態和畫布上的交互性。那裏沒有捷徑[1],對不起。
[1]好吧,有幾個用於畫布對象交互的庫,允許您使用SVG對象作爲它們的對象,比如fabric.js。但取決於你想要的,這可能遠遠不夠。
感謝您的輸入。我會看看Fabric.js! – Jackalope
- 1. MFMessageComposeViewController:我可以用自定義動畫來呈現嗎?
- 2. iphone:我可以將UIImageView動畫轉換爲svg/gif文件嗎?
- 3. 可以在WebGL-Canvas上呈現Web Worker嗎?
- 4. 可以動態呈現Wordpress帖子嗎?
- 5. 我的HTML5 Canvas代碼可以轉換爲SVG嗎?
- 6. 我可以在SMIL中播放SVG動畫嗎?
- 7. 我可以在AMP頁面中實施D3 svg動畫嗎?
- 8. 如果gzip和塊傳輸SVG可以部分呈現嗎?
- 9. html2canvas可以在頁面中呈現svg嗎?
- 10. 我可以動態呈現NgModal的HTML
- 11. 可以動畫嗎?
- 12. 當DisplayObject將在AS3中呈現時,我可以操作嗎?
- 13. 我們可以動畫顯示嗎?
- 14. 我可以預先加載動畫嗎?
- 15. 如何將QGraphicsScene動畫呈現給電影文件?
- 16. 我可以使用jQuery重現此全屏Flash動畫嗎?
- 17. 與位圖相比,svg圖像難以呈現給瀏覽器嗎?
- 18. 切換畫布上的可見性呈現svg
- 19. 你可以給任何未呈現爲html的asp.net控件嗎?
- 20. 可以在頁面加載後將變量發送給我的Flash動畫嗎?
- 21. 我可以將BaseUri分配給XDocument嗎?
- 22. 使用FabricJS在Canvas上呈現不同的SVG圖像
- 23. Swagger可以呈現app.UseDeveloperExceptionPage()的內容嗎?
- 24. .NET ReportViewer可以呈現HTML嗎?
- 25. itextsharp.xmlworker可以呈現嵌入圖像嗎?
- 26. 你可以動畫setRootViewController嗎?
- 27. jQuery動畫動畫呈現的部分
- 28. 可以openlayers 3呈現使用gif的動畫標記
- 29. 我可以將動畫添加到當前正在運行的動畫中嗎?
- 30. 將SVG(包含動畫)另存爲PNG文件無需在canvas中畫布
環顧四周,找到我需要的方法後,我相信我已經找到了一種方法來完成我的需求,只使用Canvas命令並將SVG從我的項目的這部分中移出。不過,我很高興收到投入,並將研究這裏發佈的示例。 – Jackalope