ズームして表示する方法が非常に重いです。 すべての図面を必要としない、より高速な方法があります。
解決策は、新しいキャンバスにパターンを作成することです。キャンバス パターン作成 ドローRECT上 キャンバスの作成 ドロー画像キャッシュと
これは、パターンやキャッシュを必要としないシンプルなソリューションです。
それはfabric.Imageは、カスタムzoomLevelプロパティとctx.drawImage(の完全な署名を使用して異なる動作をする方法をレンダリング書き換えで構成さ)
fabric.Image.prototype._render = function(ctx) {
var fwidth = this._element.width/(this.zoomLevel + 1);
var fheight = this._element.height/(this.zoomLevel + 1);
var wdiff = (fwidth - this._element.width)/2;
var hdiff = (fheight - this._element.height)/2;
ctx.drawImage(this._element, -wdiff, -hdiff, fwidth, fheight, -this.width/2, - this.height/2, this.width, this.height);
}
var canvas = this.__canvas = new fabric.Canvas('c');
fabric.Image.fromURL("https://images2.alphacoders.com/147/147320.png", function(img) {
var zoomLevel = 0;
var zoomLevelMin = 0;
var zoomLevelMax = 3;
img.zoomLevel = 0
img.scale(0.1);
canvas.add(img);
img.zoomIn = function() {
if (zoomLevel < zoomLevelMax) {
zoomLevel += 0.1;
img.zoomLevel = zoomLevel;
}
};
img.zoomOut = function() {
zoomLevel -= 0.1;
if (zoomLevel < 0) zoomLevel = 0;
if (zoomLevel >= zoomLevelMin) {
img.zoomLevel = zoomLevel;
}
};
});
canvas.on('mouse:wheel', function(option) {
var imgObj = canvas.getActiveObject();
if (!imgObj) return;
option.e.preventDefault();
if (option.e.deltaY > 0) {
imgObj.zoomOut();
} else {
imgObj.zoomIn();
}
canvas.renderAll();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.17/fabric.js"></script>
<h1> FabricJS imageHelper</h1>
<div id="canvasContainer">
<canvas id="c" width="1920" height="600"></canvas>
</div>
<br>
それは私が解決されません問題。しかし、それは私の実装よりも簡単で高速です。すばらしいです !そんなに@AndreaBogazziに感謝します。 – Jacky
私はおそらくあなたの問題を取得しませんでした。あなたはそれをより良く説明できますか? – AndreaBogazzi