【发布时间】:2016-01-19 02:43:54
【问题描述】:
以下代码是在 VueJS 实例中的 D3 片段。 sn-p 创建圆圈并让您拖动它们。
new Vue({
el: 'body',
data: {
x: '',
y: ''
},
computed: {
pos: function () {
function click() {
var point = d3.mouse(this),
p = { x: point[0], y: point[1] }
svg.append('circle')
.attr('transform', 'translate(' + p.x + ',' + p.y + ')')
.attr('r', '5')
.attr('class', 'dot')
.style('cursor', 'pointer')
.call(drag)
var dots = d3.selectAll(".dot")
var svg = d3.select('body').append('svg')
.attr('width', 400)
.attr('height', 400)
.on('click', click)
var drag = d3.behavior.drag()
.on('drag', dragmove)
function dragmove(d) {
var x = d3.event.x
var y = d3.event.y
d3.select(this).attr('transform', 'translate(' + x + ',' + y + ')')
this.x = x
console.log('x:', this.x)
}
console.log('x:', this.x)
}
},
ready: function () {
}
})
现在,我正在尝试获取拖动圆圈的位置 x。第一个console.log('x:', this.x) 记录位置:x: 190。但是第二长,dragmove() 函数之外的那个不记录任何内容。
如何让第二个console.log 记录this.x 的值?
这是 JSFiddle:https://jsfiddle.net/alexcheninfo/unejge3k/1
【问题讨论】:
-
你想要圆圈翻译还是只是(任何)变量x?
-
@Fawzan 圆圈的位置:
x和y。但现在我只是想得到x,进行测试。 -
你确定
this在每种情况下都指的是同一个对象吗? -
你可以得到翻译
x,如果你想要x你需要在上下文之外定义它。我会回答的。 -
@nnnnnn 哦,你是对的。
this.x在dragmove内返回undefined。不是在data中创建的x。如何解决这个问题?
标签: javascript d3.js vue.js