2011-10-15 16 views
10

Grup içinde grup ve tek tek sürüklemeye çalışıyorum. Grupta 3 daire var. Mavi ve gri daireler tek tek (onmousedown tarafından) sürüklenmeli ve turuncu renk grup hareketidir (onclick ile). Sorun şu ki, tüm grubu sürükledikten sonra http://www.atarado.com/stackOF/drag-with%20problems.svg numaralı telefondan denemek ve kodu görmek zorundasınız.SVG grup için sürükleniyor

Herhangi bir yardım için teşekkür ederiz. Teşekkürler.

cevap

20

ben senin Sorunu çözdükten: http://dl.dropbox.com/u/169269/group_drag.svg

konu tek sürükleme çemberin cx değiştiren ve cy niteliklerini ancak grup sürükleme bütün grup dönüşümünü etkileyen olmasıydı. Ben dönüşümleri kullanarak şeyler o yüzden tüm eserler basitleştirdik ve yalnızca tek bir ikisi için fonksiyonların kümesini gerekir: (

function startMove(evt, moveType){ 
    x1 = evt.clientX; 
    y1 = evt.clientY; 
    document.documentElement.setAttribute("onmousemove","moveIt(evt)") 

    if (moveType == 'single'){ 
     C = evt.target; 
    } 
    else { 
     C = evt.target.parentNode; 
    } 
} 

function moveIt(evt){ 
    translation = C.getAttributeNS(null, "transform").slice(10,-1).split(' '); 
    sx = parseInt(translation[0]); 
    sy = parseInt(translation[1]); 

    C.setAttributeNS(null, "transform", "translate(" + (sx + evt.clientX - x1) + " " + (sy + evt.clientY - y1) + ")"); 
    x1 = evt.clientX; 
    y1 = evt.clientY; 
} 

function endMove(){ 
    document.documentElement.setAttributeNS(null, "onmousemove",null) 
} 

Şimdi startMove çağrı (evt, 'tek') bir tek nesneyi taşımak için, ya startMove evt, 'group') gruba ait olduğu gruba aittir.

+0

Çok teşekkür ederim. Tam olarak kaputun altında sadeliğe ihtiyacım var. Şimdilik görebildiğim tek dezavantaj Firefox desteğinin olmamasıdır (tekrar). Chromium altında mükemmel çalışıyor ve Midori ve Chrome'da localhost üzerinde çalışmıyor! Keşfetmem gereken bir "kara büyü" var (Linux Mint OS). Her neyse, Peter, cevabınız için ve web sayfalarınızdaki güzel eğitimler için teşekkür ederim. – Alex

+0

Numara ile "NaN" değiştirdiğinizde localhost üzerinde çalışır. – Alex

+0

Güzel! Zarafet için +1. –