我正在使用d3 v4。d3手動變焦錯誤
我正在使用以下example在面積圖上實施縮放。我變焦登記爲:
// Zoom Components
zoom = d3.zoom()
.scaleExtent([1, dayDiff*12])
.translateExtent([[0, 0], [width, height]])
.extent([[0, 0], [width, height]])
.on("zoom", zoomed);
隨着我的縮放方法看起來像這樣:
function zoomed(){
t = d3.event.transform;
console.log(t);
...
}
當車輪自然變焦時,console
吐出:
{
k:1.0097512975966858
x:-1.9210056265470996
y:-1.004383652458642
}
我m使用TimeScale
,我想放大並翻譯一段時間。例如,我可能只想顯示7天爲x1和x2,所以我計算k的比例因子,然後計算tx值以轉換爲某個區域。 I 創建了手動縮放方法來觸發手動縮放。用下面的代碼:
function manualZoom(){
var outerRightDay,
thirtyBeforeOuter,
k,
tx;
// Get outer right day
outerRightDay = moment(xScale.domain()[1]);
// Get 30 days before
thirtyBeforeOuter = moment(outerRightDay).subtract(31,'days');
// Get scale k
k = width/(xScale(outerRightDay) - xScale(thirtyBeforeOuter));
// Get transform value
svg.call(zoom.scaleBy, k);
tx = 0 - k * xScale(thirtyBeforeOuter);
svg.call(zoom.translateBy,tx);
}
運行此之後,縮放方法吐出:
{
k:1.0097512975966858 //a good number
x:-1.9210056265470996 //a good number
y:NAN //this is an issue!!!!
}
它與鼠標滾輪,買的觸摸設備。我的y
是NAN
並阻止我放大觸摸設備。我如何計算ty
將其提供給zoom.translateBy()
。
我在這裏包含了一個jsFiddle。
你可以給一個工作小提琴.. – Cyril
是讓我把一個在一起。 – inspired
@Cyril。我已經添加了一個JsFiddle – inspired