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

  • LinusTechTips

    LinusTechTip

    25 Kasım 2008
  • Sali Kaceli

    Sali Kaceli

    24 ŞUBAT 2009
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010