SORU
24 EKİM 2011, PAZARTESİ


Bir şekilde D3 güç düzeni bir grafik yakınlaştırmak için var mı?

D3 sahip bir güç düzeni here yönlendirilmiş. Bir şekilde bu grafik yakınlaştırma eklemek var mı? Şu anda, fare tekerleği olay yakalama şansım oldu ama gerçekten kendini yeniden düzenleme işlevi yazmak nasıl emin değilim. Herhangi bir öneriniz var mı?

    var vis = d3.select("#graph")
        .append("svg:svg")
        .call(d3.behavior.zoom().on("zoom", redraw)) // <-- redraw function
        .attr("width", w)
        .attr("height", h);

CEVAP
26 EKİM 2011, ÇARŞAMBA


Güncelleme 6/4/14

Ayrıca Bkz: 14* *D3 v. 3 related example değişiklikler için. Bu muhtemelen aşağıda cevabını yerini alır bence.

Güncelleme 2/18/2014

Eğer tüm SVG pan ve zoom istiyorsan @ahaarnos cevabı tercih olduğunu düşünüyorum. Benim cevabım g iç içe geçmiş unsurlar aşağıda olmayan yakınlaştırma aynı SVG elemanları (orijinal bir durum sözkonusu değil) gerçekten sadece gerekli. Eğeryapıng bir eleman için davranış uygulamak, rect veya benzeri bir arka plan öğesi g işaretçi olaylar almasını sağlamak için gereklidir.

Orijinal Cevap

Bu çalışma zoom-pan-transform örnek dayalı var - benim jsFiddle burada görebilirsiniz: http://jsfiddle.net/nrabinowitz/QMKm3/

Biraz daha karmaşık olmasını umduğunu - yuva birkaç g elementler, elde etmek için çalışmak, set SVG pointer-events nitelik all, ve sonra eklemek bir arka plan dikdörtgen almak için işaretçi olaylar (aksi takdirde, sadece çalışırken işaretçi üzerinde bir düğüm ya da bağlantı). redraw fonksiyonu nispeten basit, sadece içteki dönüştürme ayarı g:

var vis = d3.select("#chart")
  .append("svg:svg")
    .attr("width", w)
    .attr("height", h)
    .attr("pointer-events", "all")
  .append('svg:g')
    .call(d3.behavior.zoom().on("zoom", redraw))
  .append('svg:g');

vis.append('svg:rect')
    .attr('width', w)
    .attr('height', h)
    .attr('fill', 'white');

function redraw() {
  console.log("here", d3.event.translate, d3.event.scale);
  vis.attr("transform",
      "translate("   d3.event.translate   ")"
        " scale("   d3.event.scale   ")");
}

Bu etkili bir şekilde tüm SVG ölçekler, vuruş genişliği de, bir görüntü üzerinde yakınlaştırma gibi ölçekler.

Benzer bir tekniği gösteren example başka bir var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fireflame65

    fireflame65

    27 Mart 2007
  • rekjavicxxx

    rekjavicxxx

    28 EKİM 2007
  • Trulia

    Trulia

    29 Kasım 2006