2016-04-10 20 views
1

Aşağıdaki örnekte, bir ülke bir ülke seçtiğinde, dünyanın döndüğü ve o ülkeye yöneldiğini görüyorum. Bir ülkeye tıklandığında, dünyanın o ülkeye gitmesi için nasıl kodlayabilirim?D3 - Dünyayı tıklatılan ülkeye ortalayın

D3 Globe

Ben mouseover olaydan önce tıklama işleyicisi bir ekleme yapmaya çalıştık ama işe görünmüyor. Herhangi bir fikir?

.on("click", function(d) { 
    var rotate = projection.rotate(), 
    focusedCountry = country(countries, this), 
    p = d3.geo.centroid(focusedCountry); 
    svg.selectAll(".focused").classed("focused", focused = false); 

    //Globe rotating 

    (function transition() { 
    d3.transition() 
    .duration(2500) 
    .tween("rotate", function() { 
      var r = d3.interpolate(projection.rotate(), [-p[0], -p[1]]); 
      return function(t) { 
      projection.rotate(r(t)); 
      svg.selectAll("path").attr("d", path) 
      .classed("focused", function(d, i) { return d.id == focusedCountry.id ? focused = d : false; }); 
      }; 
      }) 
    })(); 
}) 

cevap

3

İlk böyle yoluna bir tıklama oluşturun: tıklanan veriler için

.on("click", function(d){rotateMe(d);}) 

Değişim kodunu. Tıklanan yolun kimliğini alın ve ülke verilerini alın.

var rotateMe = function(d) { 
    var rotate = projection.rotate(), 
    focusedCountry = country(countries, d.id),//get the clicked country's details 
    p = d3.geo.centroid(focusedCountry); 
    console.log(focusedCountry, "hello") 
    svg.selectAll(".focused").classed("focused", focused = false); 

//Globe rotating 

(function transition() { 
    d3.transition() 
    .duration(2500) 
    .tween("rotate", function() { 
    var r = d3.interpolate(projection.rotate(), [-p[0], -p[1]]); 
    return function(t) { 
     projection.rotate(r(t)); 
     svg.selectAll("path").attr("d", path) 
     .classed("focused", function(d, i) { return d.id == focusedCountry.id ? focused = d : false; }); 
    }; 
    }) 
    })(); 
}; 

kod here

+0

çalışan komik ne biliyoruz? Uluslararası tarih çizgisini geçerseniz, dünya geri dönecektir! Örneğin: dünyayı iki veya üç kez döndürün ve belirli bir ülkeyi merkeze yakın konumlandırın. O ülkeyi tıklarsanız, dünyanın biraz dönmesini ve ülkenin merkezini oluşturmasını beklerdin, değil mi? Fakat bunun yerine, bu iki veya üç kez geri dönecek ve ardından ülkeyi ortalayacak! –

+0

nopes! Bunu yeniden yapamazdım :) birçok kez denedi ama sıra dışı bir şey bulamadı ... – Cyril

+0

Gerçekten mi? Belki sadece tarayıcım? Bunu deneyin: projeksiyonunuz merkezde batı Afrika ile başlar. Projeksiyonun tam ortasına gelene kadar, projeksiyonu batıya doğru hareket ettirin (dünyayı batıdan doğuya doğru normal şekilde döndürün). Şimdi Avustralya'ya tıklayın. Tarayıcımda, dünya doğuya tam bir dönüş yapıyor ve ardından Avustralya'ya yerleşiyor. –