Ich versuche, SVG-Bilder auf einer Leinwand die Bilder gezeichnet einer nach dem anderen zu machen, eine bestimmte Zeile zu füllen, ist unter dem Code-Schnipsel aus dem gleichen:Rendern von SVG-Bildern auf einer Leinwand
function createSVGUrl(svg) {
var svgBlob = new Blob([svg], {type: 'image/svg+xml;charset=utf-8'});
return DOMURL.createObjectURL(svgBlob);
};
/**
* Renders svg tile on the given context.
* @param {CanvasRenderingContext2D} ctx
* @param {SVGElement} svg The svg tile.
* @param {{x: number, y:number}} pos The position to draw the svg tile on.
* @throws Error
*/
function renderSVGTile(ctx, svg, pos) {
var img = new Image();
var url = createSVGUrl(svg);
img.onload = function() {
try {
ctx.drawImage(img, pos.x, pos.y);
ctx.imageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
DOMURL.revokeObjectURL(url);
} catch (e) {
throw new Error('Could not render image' + e);
}
};
img.src = url;
};
Die Problem ist, dass ich die teilweise gefüllten Reihen sehen kann, die ich nicht will, gibt es irgendeine Weise, die ganze Reihe auf einmal zu füllen?
Nur für alle Bild warten haben vorinstalliert, dann ziehen. Btw, imageSmoothingEnabled sollte vor dem Aufruf von drawImage gesetzt werden, und es sollte vermieden werden, es in eine Schleife zu setzen. – Kaiido
Mögliches Duplikat von [Wie funktionieren Bild-Preloader?] (Http://stackoverflow.com/questions/30578521/how-do-image-preladers-work) – Kaiido
@Kaiido nicht genau ich habe die vorgeschlagene Lösung ausprobiert, tut es aber nicht funktionieren in meinem Fall, möglicherweise aufgrund der sehr großen Anzahl von Bildern pro Zeile. Theoretisch sollte es funktionieren, aber es nicht, [hier] (http://codereview.stackexchange.com/q/133964/58341) können Sie das Beispiel sehen. – CodeYogi