diff --git a/doc/example/force1.html b/doc/example/force1.html index 7bcd410294aae258dbc4ef4f8a57605ea8308486..6e18ab0542b53169c7e327a7759f9344039c1667 100644 --- a/doc/example/force1.html +++ b/doc/example/force1.html @@ -142,6 +142,7 @@ option = { density : 0.05, attractiveness: 1.2, linkSymbol: 'arrow', + draggable: false, nodes:[ {category:0, name: '乔布斯', value : 10}, {category:1, name: '丽萨-乔布斯',value : 2}, diff --git a/doc/example/force5.html b/doc/example/force5.html new file mode 100644 index 0000000000000000000000000000000000000000..fff144b98dfb603d09941539792ca8224057f5e1 --- /dev/null +++ b/doc/example/force5.html @@ -0,0 +1,232 @@ + + + + + ECharts + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/chart/force.js b/src/chart/force.js index bc575d889c81f25b1d51dfe62df9387839155800..ee3924051600691ffcda3bb09a13aaccc60b0e0a 100644 --- a/src/chart/force.js +++ b/src/chart/force.js @@ -269,10 +269,10 @@ define(function(require) { var r = radius[i]; var initPos; - if (node.initial !== undefined) { - initPos = node.initial; - } else if (nodeInitialPos[node.name] !== undefined) { + if (nodeInitialPos[node.name] !== undefined) { initPos = nodeInitialPos[node.name]; + } else if (node.initial !== undefined) { + initPos = node.initial; } else { initPos = _randomInSquare( viewportWidth/2, viewportHeight/2, initSize @@ -364,10 +364,12 @@ define(function(require) { } // 拖拽特性 - self.setCalculable(shape); - shape.dragEnableTime = 0; - shape.ondragstart = self.shapeHandler.ondragstart; - shape.draggable = true; + if (forceSerie.draggable) { + self.setCalculable(shape); + shape.dragEnableTime = 0; + shape.ondragstart = self.shapeHandler.ondragstart; + shape.draggable = forceSerie.draggable; + } var categoryName = ''; if (typeof(node.category) !== 'undefined') { @@ -624,15 +626,13 @@ define(function(require) { var velocity = []; // 计算位置(verlet积分) for (var i = 0, l = nodePositions.length; i < l; i++) { + var node = filteredNodes[i]; var name = filteredNodes[i].name; if (filteredNodes[i].fixed) { // 拖拽同步 vec2.set(nodePositions[i], mouseX, mouseY); vec2.set(nodePrePositions[i], mouseX, mouseY); vec2.set(nodeShapes[i].position, mouseX, mouseY); - if (filteredNodes[i].initial !== undefined) { - vec2.set(filteredNodes[i].initial, mouseX, mouseY); - } if (nodeInitialPos[name] !== undefined) { vec2.set(nodeInitialPos[name], mouseX, mouseY); } @@ -655,18 +655,21 @@ define(function(require) { velocity[1] = Math.max(Math.min(velocity[1], 100), -100); vec2.add(p, p, velocity); + + if (node.fixY && node.initial) { + p[1] = node.initial[1]; + } + if (node.fixX && node.initial) { + p[0] = node.initial[0]; + } + vec2.copy(nodeShapes[i].position, p); if (name) { - if (nodeInitialPos[name] === undefined) { + if (!nodeInitialPos[name]) { nodeInitialPos[name] = vec2.create(); } vec2.copy(nodeInitialPos[name], p); - } else { - if (filteredNodes[i].initial === undefined) { - filteredNodes[i].initial = vec2.create(); - } - vec2.copy(filteredNodes[i].initial, p); } // if(isNaN(p[0]) || isNaN(p[1])){ @@ -761,6 +764,9 @@ define(function(require) { // 没有在当前实例上发生拖拽行为则直接返回 return; } + if (!(forceSerie && forceSerie.draggable)) { + return; + } var shape = param.target; var idx = shape.__forceIndex; var node = filteredNodes[idx]; diff --git a/src/config.js b/src/config.js index dddf40e9b2ec7249232195ab711d25c42d97d239..369eb42b7ce7ed833bb788fbfc9f7930bf41256e 100644 --- a/src/config.js +++ b/src/config.js @@ -719,6 +719,7 @@ define(function() { coolDown : 0.99, linkSymbol: null, linkSymbolSize: [10, 15], + draggable: true, // 分类里如果有样式会覆盖节点默认样式 categories : [], itemStyle: {