我有一個SVG形狀(這很複雜,我爲了理解而簡化了它),這是我需要轉換的。我的要求是,在SVG元素中保留一個變換
- 當鼠標懸停,集團的規模應以2倍
- 當鼠標移開,組應縮減爲1x
- 當拖動組規模應preseved
所以到目前爲止,除了一個問題,我已經設法完成了所有的部分。當我嘗試將鼠標懸停在組上時,它會將其恢復到其原始位置後拖動該元素。我不明白爲什麼會發生。這是一個工作fiddle。誰能幫我嗎?
的index.html
<svg width="400" height="400" style="background-color: red">
<g id="op" class="operator" transform="translate(0,0)">
<circle class="head" cx="50" cy="50" r="20" style="fill: yellow"></circle>
<circle cx="40" cy="40" r="10" style="fill: blue"></circle>
<circle cx="60" cy="40" r="10" style="fill: blue"></circle>
</g>
</svg>
的script.js
d3.selectAll('.operator')
.on('mouseenter', function() {
console.log('Mouse Enter');
var c = d3.select(this).select('.head');
var x = c.attr('cx');
var y = c.attr('cy');
var scale = 2;
var scaleX = -1 * x * (scale - 1);
var scaleY = -1 * y * (scale - 1);
d3.select(this).attr('transform', 'translate(' + scaleX + ',' + scaleY + ')' + 'scale(' + scale + ')');
})
.on('mouseleave', function() {
console.log('Mouse Leave');
var c = d3.select(this).select('.head');
var x = c.attr('cx');
var y = c.attr('cy');
var scale = 1;
var scaleX = -1 * x * (scale - 1);
var scaleY = -1 * y * (scale - 1);
d3.select(this).attr('transform', 'translate(' + scaleX + ',' + scaleY + ')' + 'scale(' + scale + ')');
})
.call(d3.behavior.drag()
.origin(function() {
var t = d3.select(this);
return {
x: d3.transform(t.attr("transform")).translate[0],
y: d3.transform(t.attr("transform")).translate[1]
};
})
.on('drag', function() {
var oldScale = d3.transform(d3.select(this).attr('transform')).scale;
d3.select(this).attr('transform', 'translate(' + d3.event.x + ',' + d3.event.y + ')scale(' + oldScale + ')');
}))
這正是我想要的,TIP翻譯子元素的榮譽。這是我從未想到的。 – Fawzan