2016-01-20 78 views
2

下面的代碼創建一個圓,並使其可拖動後:元素不再拖動添加參數D3拖動行爲

HTML:

<svg width='400' height='400'> 
    <rect width='100%' height='100%'></rect> 
    <circle transform='translate(259.5,197)' r='10'></circle> 
</svg> 

JS:

var drag = d3.behavior.drag().on('drag', dragMove) 
d3.select('svg').append('circle').attr('transform', 'translate(' + '100px' + ',' + '100px' + ')').attr('r', '5').call(drag) 

function dragMove(test) { 
    var x = d3.event.x 
    var y = d3.event.y 
    console.log(test) 
    d3.select(this).attr('transform', 'translate(' + '200px' + ',' + '200px' + ')') 
} 

它的工作原理。但是,當我加一個參數dragMove

'drag', function() { dragMove('test') } 

拖拽功能停止工作(console.log(test)輸出'test',雖然)

爲什麼會出現這種情況,如何解決?

https://jsfiddle.net/alexcheninfo/d8doyc9r/4/

回答

3

應該是這樣的:

var drag = d3.behavior.drag().on('drag', function(d) { 

    dragMove(this);//pass the this 
}) 


function dragMove(me) { 


    var x = d3.event.x 
    var y = d3.event.y 
    //operate on me 
    d3.select(me).attr('transform', 'translate(' + x + ',' + y + ')') 
} 

工作代碼here

希望這有助於!

+1

謝謝,它的工作!一個問題,爲什麼函數(d)中的'd'必需?我刪除了它,沒有發生任何事。 – alexchenco

+0

哈哈哈我的錯誤請刪除它.. :) – Cyril

+1

我總是看到在d3示例代碼中'd'。我認爲有人犯了這個錯誤,然後人們把它包括在內,因爲慣例,哈。 – alexchenco