HTML metin ve arka plan dikdörtgeni içeren grup için sürükleme davranışını d3 çerçevesini kullanarak uygulamaya çalışıyorum. Drag.origin ayarlamamış olsa da, fare-pozisyonu/eleman-koordinatları ofsetinden dolayı dikkat çekici bir sıçrama görebildiğim halde çalışmayı başarabiliyordum. Tam olarak d3 wiki-page 'da nasıl açıklandığı sayfa Sürüklenecek Origin'in nasıl ayarlanacağını açıklayan sayfa olmasına rağmen, ti uygulamasının benim örneğimde nasıl uygulandığını tam olarak anlayamıyorum. İki farklı yaklaşımı denedim: öğeleri bir arada gruplamak ve yeni elementi tokmak için tanımlamak. İlk durumda çeviri işlevini kullanmam gerekiyor ve grubun koordinatlarını nasıl bile edeceğimi bile bilmiyorum.d3 JavaScript kitaplığında sürükleme davranışı için Origin (drag.origin) nasıl ayarlanır
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500);
var group = svg.append("svg:g")
.attr("transform", "translate(10, 10)")
.attr("id", "group");
var rect1 = group.append("svg:rect")
.attr("rx", 6)
.attr("ry", 6)
.attr("x", 5/2)
.attr("y", 5/2)
.attr("id", "rect")
.attr("width", 250)
.attr("height", 125)
.style("fill", 'white')
.style("stroke", d3.scale.category20c())
.style('stroke-width', 5);
var html1 = group.append("foreignObject")
.attr("x", 50)
.attr("y", 25)
.attr("width", 200)
.attr("height", 100)
.attr("id", "fobject")
.style("border-color", d3.scale.category20c())
.append("xhtml:div")
.style("font", "14px 'Helvetica Neue'")
.html("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eu enim quam.");
var innerSvg = svg.append("svg")
.attr("x", 500)
.attr("y", 10)
.attr("id", "innerSvg");
var rect2 = innerSvg.append("svg:rect")
.attr("rx", 6)
.attr("ry", 6)
.attr("x", 5/2)
.attr("y", 5/2)
.attr("id", "rect")
.attr("width", 250)
.attr("height", 125)
.style("fill", 'white')
.style("stroke", d3.scale.category20c())
.style('stroke-width', 5);
var html2 = innerSvg.append("foreignObject")
.attr("x", 50)
.attr("y", 25)
.attr("width", 200)
.attr("height", 100)
.attr("id", "fobject")
.style("border-color", d3.scale.category20c())
.append("xhtml:div")
.style("font", "14px 'Helvetica Neue'")
.html("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eu enim quam.");
var drag1 = d3.behavior.drag()
.on("drag", function(d,i) {
d3.select(this).attr("transform", function(d,i){
return "translate(" + [ d3.event.x,d3.event.y ] + ")"
})
});
var drag2 = d3.behavior.drag()
.on("drag", function(d,i) {
d3.select(this)
.attr("x", d3.event.x)
.attr("y", d3.event.y);
});
group.call(drag1);
innerSvg.call(drag2);
Çok herhangi bir açıklama takdir ediyorum, doğal olarak burada bir çalışma örneği hazırlanmıştır: http://jsfiddle.net/Y8y7V/
sizin açıklama için çok teşekkür ederim . İlk durumda, x/y koordinatlarını öğesinin parametresi olarak ekleyebilirim. Çeviri parametresini tanımlanmış x/y parametrelerine göre nasıl ayarlayabilirim, örneğin: var group = svg.append ("svg: g") .attr ("x", 50) .attr ("y" , 25) .attr ("dönüşümü", "çevir" ("+ [this.attr (" x "), this.attr (" y ")] +") ") Ocourse'ın çalışması işe yaramaz, çünkü bu referanslar pencere nesnesi. –
karlitos
Kökeni() 'yi uygun şekilde ayarlarsanız, dönüştürmeyi statik koordinatlara göre ayarlamanız gerekmez. –
Sorunumu çözmüyorum - henüz cevap bulamadım - grubun pozisyonunu almak için, sadece "dönüşümü" kullanabildiğim zaman, grubun pozisyonunu al,. Her neyse, önceki açıklamanız problemimi çözdü ve standlar için bir çalışma çözümü buldum. –
karlitos