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: {