bsc*_*tty 3 javascript jquery svg d3.js angularjs
我有一个 D3 图表,允许用户单击按钮将其带到指定的节点。该按钮如下所示:
<button type="button" class="btn btn-primary" ng-click="ctrl.panGraph(9)">Go to End</button>
Run Code Online (Sandbox Code Playgroud)
此按钮将把用户从单击时在 svg 中的任何位置带到最后一个节点的 x 和 y 坐标,id 为 9。单击时调用此函数:
function panGraph (nodeId:any) {
svgWidth = parseInt(svg.style("width").replace(/px/, ""), 10);
svgHeight = parseInt(svg.style("height").replace(/px/, ""), 10);
for (var i = 0; i < renderedNodes.length; i++) {
if (nodeID === renderedNodes[i].id) {
ctrl.selectedNode = renderedNodes[i];
var translate = [svgWidth / 2 - renderedNodes[i].x, svgHeight / 2 - renderedNodes[i].y];
var scale = 1;
svg.transition().duration(4000).ease(d3.easeExpInOut).call(zoom.translate(translate).scale(scale).event);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的函数中,我拥有已在页面上渲染的所有渲染节点,一旦找到匹配的 id,我就会使用它的 x 和 y 坐标将指定节点置于 svg 中间的中心。一切都很好。
我试图在单击按钮时将图形转换为指定节点时使用一些动画。当用户单击将他或她带到指定节点的按钮时,是否可以对过渡进行动画处理,以便过渡最初开始缓慢,然后加速,但在接近指定节点时最后再次减速节点?谢谢
更新:
上面包含“ease”的代码给了我这个控制台错误:
angular.js:13550 TypeError: Cannot read property 'indexOf' of undefined
at Object.d3.ease (d3.js:5844)
at Array.d3_transitionPrototype.ease (d3.js:8838)
at zoomOnNode (DiagramComponent.ts:1128)
at DiagramComponent.ts:1072
at Scope.$digest (angular.js:17073)
at Scope.$apply (angular.js:17337)
at HTMLButtonElement.<anonymous> (angular.js:25023)
at HTMLButtonElement.dispatch (jquery.js:4737)
at HTMLButtonElement.elemData.handle (jquery.js:4549)
Run Code Online (Sandbox Code Playgroud)
以下是与 Gerardo 关于 v4 的帖子等效的 v3:
svg.transition().duration(1000).ease("exp-in-out").call(zoom.translate(translate).scale(scale).event);
Run Code Online (Sandbox Code Playgroud)
有关从 v3 到 v4 的所有缓动等效项以及其他更改的列表:
https://github.com/d3/d3/blob/master/CHANGES.md
归档时间: |
|
查看次数: |
1193 次 |
最近记录: |