我想從官方文檔中應用"general update pattern"更新鼠標事件(但可能是按鈕或其他)的svg路徑。如何使用d3.js更新svg路徑
但是路徑只能被添加和不更新。我想這就是爲什麼我沒有正確使用enter
和exit
財產,但經過一些各種試驗後,我無法讓它工作。
這是一個jsfiddle。
我的js代碼是在這裏:
var shapeCoords = [
[10, 10], [100, 10], [100, 100], [10, 100]
];
$(function() {
var container = $('#container');
// D3
console.log("D3: ", d3);
var svg = d3.select('#container')
.append('svg:svg')
.attr('height', 600)
.attr('width', 800);
var line = d3.svg.line()
.x(function(d) { return d[0]; })
.y(function(d) { return d[1]; })
.interpolate('linear');
function render() {
svg.data(shapeCoords)
.append('svg:path')
.attr('d', line(shapeCoords) + 'Z')
.style('stroke-width', 1)
.style('stroke', 'steelblue');
}
render();
var mouseIsDown = false;
container.on('mousedown mouseup mousemove', function(e) {
if (e.type == 'mousedown') {
mouseIsDown = true;
shapeCoords[3] = [e.offsetX, e.offsetY];
} else if (e.type == 'mouseup'){
mouseIsDown = false;
shapeCoords[3] = [e.offsetX, e.offsetY];
} else if (e.type == 'mousemove') {
if (mouseIsDown) {
shapeCoords[3] = [e.offsetX, e.offsetY];
render();
}
}
});
});
和HTML:
<!DOCTYPE html>
<html>
<head>
<title>D3 mousemove</title>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script type="text/javascript"
src="http://mbostock.github.com/d3/d3.js">
</script>
<script type="text/javascript" src="script.js"></script>
<style>
#container {
width: 800px;
height: 600px;
border: 1px solid silver; }
path, line {
stroke: steelblue;
stroke-width: 1;
fill: none;
}
</style>
</head>
<body>
<div id="container"></div>
</body>
</html>
你爲什麼要重複'attr('d')'? – nkint
我的意思是,你爲什麼首先改變路徑上「d」的'attr',然後通過'enter()。append()'增加更多的「d」? – nkint
第一個'attr(「d」)'只適用於已存在的元素,隨後的'attr(「d」)'爲新元素添加一個'd'屬性。 (上面添加了完整的解釋。)乾杯! –