如何增强D3.js的“平滑滚动”演示?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何增强D3.js的“平滑滚动”演示?相关的知识,希望对你有一定的参考价值。

js人,

我正在看这个演示:

http://bl.ocks.org/mbostock/1649463

它显示了一种“平滑滚动”技术,可以滚动到页面的末尾。

如何增强它以便滚动到id或选择?

我想创建一个名为slowscroll()的函数。

我希望API调用看起来像这样:

d3.select('#mybutton')
  .on('click',function(){
    slowscroll(mydelay, myduration, '#stophere');});
答案

你可以做这样的事情来停止按钮点击并从那里恢复。

//add listener to stop
d3.select("#stop").on("click", function () {
    //stop the transition
    d3.select("body").transition().duration(0);
});
//add listeners to resume
d3.select("#resume").on("click", function () {
    //resume the transition
    d3.select("body").transition()
    .delay(1)
    .duration(7500)
    .tween("scroll", scrollTween(document.body.getBoundingClientRect().height - window.innerHeight));
});

完整的工作代码here

另一答案

而不是一直到最后你可以计算偏移量

var offset = $(selector).offset().top - window.scrollY;

然后在函数中使用它

function scrollToElem(delay, duration, selector){
var offset = $(selector).offset().top - window.scrollY;

d3.transition()
    .delay(1500)
    .duration(7500)
    .tween("scroll", scrollTween(offset));

}

事件绑定

d3.select('#my-button')
.on('click',function(){
scrollToElem(1500, 7500, '#target');});

这里是完整的代码https://jsfiddle.net/mddm8xxt/2/

以上是关于如何增强D3.js的“平滑滚动”演示?的主要内容,如果未能解决你的问题,请参考以下文章

几条jQuery代码片段助力Web开发效率提升

平滑滚动到 div id jQuery

html D3byEX 9.6:甜甜圈片段(改编自D3.js v4)

js平滑滚动到顶部,底部,指定地方

如何在wpf treeview控件上启用平滑滚动

如何通过平滑滚动将最后一行添加到 UITableView?