javascript - 如何为带有溢出的div的滚动位置设置动画: auto?

标签 javascript jquery

我正在尝试创建一个函数,它将给定的 div 或 body 滚动到其中元素的位置。目前看起来像:

function scrollTo($elem, offset, delay, $context){
    delay = delay || 800;
    offset = offset || 0;
    $context = $context || $('html, body');
    $context.animate({
        scrollTop: $elem.offset().top-offset
    }, delay);
}

它在 body 上工作正常,但是,当我给它 $context 时,第一个调用按预期工作,但所有连续调用都滚动到错误的位置。

为什么会出现这种行为以及如何解决它? FIDDLE

最佳答案

offset().top 测量从页面顶部到元素的距离。

  • 当您点击.1时,到页面顶部的偏移距离为300
  • 一旦 .large(现在为 -300)滚动到该位置,.1 偏移量将变为 0.2 变为 300,.3 变为 600
  • 所以需要减去.large的偏移量才能得到真实的位置。

代码

function scrollTo($elem, offset, delay, $context){
    delay = delay || 800;
    offset = offset || 0;
    $context = $context || $('html, body');
    var a = $context.find('.large'); //need this
    $context.animate({
        scrollTop: $elem.offset().top - a.offset().top
    }, delay);
}

这是 jsfiddle https://jsfiddle.net/a8jc5q6r/4/

关于javascript - 如何为带有溢出的div的滚动位置设置动画: auto?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003146/

相关文章:

javascript - 使用异步和等待未处理的拒绝(InvalidTokenError)

c# - 使用 AJAX 在 jquery 对话框内的 jquery 选项卡内加载 MVC 用户控件(C# Inside)

javascript - 我从哪里开始对这些 slider 进行编码?

jquery - 如何使用 jquery/ajax 发布到表单

javascript - 将 string.prototype 与 click 一起使用

javascript - Jquery:如何将 "selectable"值获取到 "Slider"函数中?

javascript - 从对象访问各个属性

javascript - 如何防止我的功能组件使用 React memo 或 React hooks 重新渲染?

javascript - 在 html 中隐藏/显示表单?

javascript - 全局 JSON 变量覆盖