链式转换不会一步一步触发
Chained transitions don't trigger step-by-step
首先,我研究、尝试了一些相关的项目,但没有得到好的结果。
- https://stackoverflow.com/questions/28612706/step-by-step-transitions-using-d3-js
- d3.js中的转换队列;一个接一个
- 不同形状复合动画的D3.js链转换
接下来,我代码的相关部分:
function moveMarker(i) {
var curr_i = parseInt(d3.select("#nomad").attr("nomad-index"));
var target_i = parseInt(i);
switch (curr_i) {
case 0:
switch (target_i) {
case 0:
break;
case 1:
moveToMark(1);
break;
case 2:
moveToMark(1);
moveToMark(2);
break;
case 3:
moveToMark(1);
moveToMark(2);
moveToMark(3);
break;
case 4:
moveToMark(1);
moveToMark(2);
moveToMark(3);
moveToMark(4);
break;
}
case 1:
switch (target_i) {
case 0:
moveToMark(0);
break;
case 1:
break;
case 2:
moveToMark(2);
break;
case 3:
moveToMark(2);
moveToMark(3);
break;
case 4:
moveToMark(2);
moveToMark(3);
moveToMark(4);
break;
}
case 2:
switch (target_i) {
case 0:
moveToMark(1);
moveToMark(0);
break;
case 1:
moveToMark(1);
break;
case 2:
break;
case 3:
moveToMark(3);
break;
case 4:
moveToMark(3);
moveToMark(4);
break;
}
case 3:
switch (target_i) {
case 0:
moveToMark(2);
moveToMark(1);
moveToMark(0);
break;
case 1:
moveToMark(2);
moveToMark(1);
break;
case 2:
moveToMark(2);
break;
case 3:
break;
case 4:
moveToMark(4);
break;
}
case 4:
switch (target_i) {
case 0:
moveToMark(3);
moveToMark(2);
moveToMark(1);
moveToMark(0);
break;
case 1:
moveToMark(3);
moveToMark(2);
moveToMark(1);
break;
case 2:
moveToMark(3);
moveToMark(2);
break;
case 3:
moveToMark(3);
break;
case 4:
break;
}
}
}
function moveToMark(i) {
var x = spot[i][7]; // Latitude
var y = spot[i][8]; // Longitude
d3.select("#nomad")
.attr("nomad-index", i)
.transition()
.delay(3000)
.duration(1000)
.attr("cx", x)
.attr("cy", y);
}
我要做的要点:
我有一个事件表。在单击表中的任何事件时,我有一个圆圈(nomad
),它移动到spot
数据集中确定的该事件的相应位置。直接点对点移动不成问题。然而,我有一个特殊的约束:我必须根据事件的时间轴移动。
假设我点击事件#3。我的圈子必须先移动到事件1和事件2,然后他们将停留在事件3。如果圆圈处于任何事件中,单击任何其他事件,无论是低索引还是高索引,它都需要遍历当前位置和目标之间的事件。
我相信我的嵌套开关案例可以进一步解释这一点。我相信我正在尝试的事情并不像我想的那么复杂。然而,我遇到了一个主要的障碍:我的nomad
循环没有一步一步地经历事件,而是在延迟后立即跳转到最后一个事件。
我在上面的链接中读到过渡有一个关于链接的问题,或者我必须使用end(...)
来完成这项工作。
问题/s:
是否可以将此尝试减少为递归函数?如果有,怎么做?如果没有,我如何使每个moveToMark
连续触发?
问题是在D3选择上创建一个过渡会取消任何其他可能已经创建的过渡。也就是说,只有最后一次调用.transition()
才会生效,因为之前的所有转换都被取消了。
var cur_trans;
function moveMarker(i) {
cur_trans = d3.select("#nomad");
// more code
}
function moveToMark(i) {
var x = spot[i][7]; // Latitude
var y = spot[i][8]; // Longitude
d3.select("#nomad")
.attr("nomad-index", i);
cur_trans = cur_trans
.transition()
.delay(3000)
.duration(1000)
.attr("cx", x)
.attr("cy", y);
}
这将在每次调用时用新的转换覆盖cur_trans
,从而确保您不会丢失任何转换。
请注意,根据代码的其余部分及其调用结构,可能会有竞争条件等,您可能需要防止。
相关文章:
- 对父作用域的指令更新延迟了一步
- Parsley.js,多步骤表单,在移动到上一步时跳过验证
- 有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断
- 如何禁用在Bootstrap中不完成一步就转到下一步
- 如何使用Jquery一步一步地获取PHP数据
- jQuery Slider 滑得太远了一步
- 将“下一步”和“上一个”按钮添加到较大的图像
- 引导表单向导 - 防止在提交 ajax 响应的每个页面表单出现错误时滚动到下一步
- 如何创建一个“下一步”按钮,使用 Java 脚本和 Twitter Bootstrap 切换选项卡
- 如何在单击下一步时使文本移动/更改
- 您如何控制在填写表单时单击下一步时 iOS/Android 将关注哪个字段
- JQuery SlideToggle()在放松的每一步都执行函数
- 对变更作出反应->setState落后一步
- AngularJS中的上一步
- Jquery UI选项卡-根据输入字段值,使用“下一步”/“上一步”按钮推进选项卡
- 我有一系列的处方受试者(a->B->C->a),但最后一步不起作用
- Jquery选项卡单击时高亮显示'下一步'按钮
- 如何解析用户对象以返回屏幕名称并继续下一步操作
- 在手动模式下单击“下一步”或“上一步”按钮后,图像转换会自动开始
- 链式转换不会一步一步触发