D3.js 如何适应d3.transition回调中的长计算时间?

D3.js 如何适应d3.transition回调中的长计算时间?,d3.js,D3.js,有时,您需要在转换“开始”和“结束”事件回调中执行计算密集型工作(转换所需),这可能需要很长时间,以至于当转换开始时(或当下一个链式转换为“结束”事件开始时),时间已经超过了转换开始时间,导致转换跳转 问题可以从下面看出。第一个和第二个动画过渡都从其“开始”值直接跳到“完成一半” !函数(t,n){“对象”==typeof exports&“undefined”!=typeof module?n(exports):“函数”==typeof define&&define.amd?define

有时,您需要在转换“开始”和“结束”事件回调中执行计算密集型工作(转换所需),这可能需要很长时间,以至于当转换开始时(或当下一个链式转换为“结束”事件开始时),时间已经超过了转换开始时间,导致转换跳转

问题可以从下面看出。第一个和第二个动画过渡都从其“开始”值直接跳到“完成一半”



!函数(t,n){“对象”==typeof exports&“undefined”!=typeof module?n(exports):“函数”==typeof define&&define.amd?define([“exports”],n):n(t.d3=t.d3 | |{}(此,函数(t){“使用严格”;函数n(){return h | | |(x(e),h=v.now()+y)}函数e(){h=0}函数o(){this.\u调用=this.\u=time=this.\u=this.\u=this.\u=this.\u=this.\u=this=this.\u=this=this=this.\t=this=this=null;函数(下一(t=h-e.时间)>=0和e.e.调用.调用调用.调用(null,t,t),e=e.e.调用.调用(null,t,t,e=e.明年明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个明年的第二个;明年的第二个;明年的第二个;明年的第二个明年的第二个明年的函数的第二个明年的第二个;第二个明年的第二个函数的函数的函数的函数的第二个明年的函数的函数的函数的第二个,(,(,(可能可能可能可能的)函数的)函数的,(,(,(,(,(调用?(o>e.&(o=e.)函数a(t){124; |(m&&(m=clearTimeout(m)),t-h>24?(td)
.attr(“高度”,d=>d)
.attr(“填充”、“无”)
.attr(“笔划”、“黑色”)
var rect=g.append(“rect”)
.attr(“宽度”,10)
.attr(“高度”,10)
.attr(“填充”、“d62728”)
.transition()
.延迟(2000年)
.持续时间(4000)
.ease(d3.easeLinear)
.attr(“宽度”,100)
.attr(“高度”,100)
.on(“开始”,函数(){
log('Start event 1',appeased()/1000);
废物(起始废物);
log('Start event 1 returning',appeased()/1000);
})
.on(“结束”,函数(){
console.log('End event 1',appeased()/1000);
废物(End1废物);
log('End event 1 returning',appeased()/1000);
})
.transition()
.attr(“宽度”,200)
.attr(“高度”,200)
.attr(“填充”、“1f77b4”)
.on(“开始”,函数(){
log('Start event 2',appeased()/1000);
废物(start2Waste);
log('Start event 2 returning',appeased()/1000);
})
.on(“结束”,函数(){
log('End event 2',appeased()/1000);
废物(end2Waste);
log('End event 2 returning',appeased()/1000);
})
  • 对于“开始”事件,您不能。在创建转换之前执行计算密集型工作,或者如果不可能,则在单独的前一个转换中执行此转换

  • 对于“结束”事件,您可以向第二个转换添加一个延迟,该延迟等于或大于第一个转换的结束事件回调的计算时间。如果您希望此操作适用于比您自己慢的客户端,请使延迟更长


!function(t,n){“object”==typeof exports&“undefined”!=typeof module?n(exports):“function”==typeof define&&define.amd?define([“exports”],n):n(t.d3=t.d3 | | |{})(this,function(t){“use strict”;function(t){返回h | | | |(x(e),h=v.now()+y)}函数e(){h=0}函数o(){this.\u=call this.\u=this.\u=this.\u=this.\u=this.\u=this.\u=this.\u=t=this=this.\u=this=(t=h-e.时间)>=0和e.e.调用.调用调用.调用(null,t,t),e=e.e.调用.调用(null,t,t,e=e.明年明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个;明年的第二个明年的第二个;明年的第二个;明年的第二个;明年的第二个明年的第二个明年的函数的第二个明年的第二个;第二个明年的第二个函数的函数的函数的函数的第二个明年的函数的函数的函数的第二个,(,(,(可能可能可能可能的)函数的)函数的,(,(,(,(,(调用?(o>e.&(o=e.)函数a(t){124; |(m&&(m=clearTimeout(m)),t-h>24?(td)
.attr(“高度”,d=>d)
.attr(“填充”、“无”)
.attr(“笔划”、“黑色”)
var rect=g.append(“rect”)
.attr(“宽度”,10)
.attr(“高度”,10)
.attr(“填充”、“d62728”)
.transition()
.延迟(2000年)
.持续时间(4000)
.ease(d3.easeLinear)
.attr(“宽度”,100)
.attr(“高度”,100)
.on(“开始”,函数(){
log('Start event 1',appeased()/1000);
废物(起始废物);
log('Start event 1 returning',appeased()/1000);
})
.on(“结束”,函数(){
console.log('End event 1',appeased()/1000);
废物(End1废物);
log('End event 1 returning',appeased()/1000);
})
.transition()
.延迟(end1Waste)
.attr(“宽度”,200)
.attr(“高度”,200)
.attr(“填充”、“1f77b4”)
.on(“开始”,函数(){
log('Start event 2',appeased()/1000);
废物(start2Waste);
log('Start event 2 returning',appeased()/1000);
})
.on(“结束”,函数(){
log('End event 2',appeased()/1000);
废物(end2Waste);
log('End event 2 returning',appeased()/1000);
})
  • 对于“开始”事件,您不能。在创建转换之前执行计算密集型工作,或者如果不可能,则在单独的前一个转换中执行此转换

  • 对于“结束”事件,您可以向第二个转换添加一个延迟,该延迟等于或大于第一个转换的结束事件回调的计算时间。如果您希望此操作适用于比您自己慢的客户端,请使延迟更长


!function(t,n){“object”==typeof exports&“undefined”!=typeof module?n(exports):“function”==typeof define&&define.amd?define([“exports”],n):n(t.d3=t.d3 | | |{})(this,function(t){“use strict”;function(t){返回h | | | |(x(e),h=v.now()+y)}函数e(){h=0}函数o(){this.\u=call this.\u=this.\u=this.\u=this.\u=this.\u=this.\u=this.\u=t=this=this.\u=this=,i}函数r(){n(),++;for(var t,e=f;e;)(t=h-e.。(u time)>=0&&e.(call.call(null,t),e=e.。(u next;-)函数u(){h=(d=v.now())+y,(m=0;最后尝试{r()}函数l(){var t=v.now(),n=t()-