【问题标题】:.scrollTop(0) not working for getting a div to scroll to the top.scrollTop(0) 无法让 div 滚动到顶部
【发布时间】:2015-10-11 00:11:19
【问题描述】:

我有一种感觉,我试图在这个问题中找到解决方案 - Can't trigger a jquery function with scroll on a particular div - 可能是这里与滚动相关的问题。

短版:无法使用此功能或类似功能

$("#Container3").scrollTop(0);

什么都没有发生,控制台没有错误,没有奇怪的行为,只是似乎忽略了 scrollTop(0) 请求。

长版:很抱歉,发布代码 sn-p 是不可行的,因为它是一个类似于应用程序的复杂界面,但我会尽力解释这个问题:

  • 根据屏幕空间加载不同界面的移动响应式网站。
  • 最小的界面由 3 部分组成 - 顶部导航、底部搜索和中间内容。
  • 内容主要是在使用期间加载,而不是在页面加载时加载。
  • 按下按钮重新加载特定 div 的内容时,我还需要将该 div 滚动到顶部以提高可用性。
  • 虽然它似乎不会影响我的问题(删除它并不能解决问题),但我应该透露我正在使用hammer.js 来模拟触摸事件,因为它可能会影响解决方案。

加载是在视口之外完成的,因此不需要动画,但只要它们能够正常工作,我就会使用它们。

这就是我的 jquery 请求的样子

$(document).on("click",".NavRowButton",function(event){
    $("#Container3").scrollTop(0);
    var $targetButtonId=$(event.target).attr("id");
    $("#Content").load("/load/login/"+$targetButtonId+".php");
    $("#DisplayContentName").html("<span class='NavColSpan'>"+$targetButtonId+"</span>");
    $("#Container3").find(".WindowBorder").css("top","0");
});

#Container3 有滚动条并且是#Content 的直接父级。

这是我仍在构建的一个功能,它是我之前遇到的问题的解决方案,也是我现在用来帮助调试这个问题的解决方案:

document.addEventListener('scroll',function(event){
    if(event.target.className==='Container'){
        var $currentScroll=$(event.target).scrollTop();
        console.log($currentScroll);
        var $targetId=$(event.target).attr("id");
        console.log($targetId);
    }
},true);

提前致谢。

编辑:我刚刚注意到,如果我放了一个 $(event.target).scrollTop(0);在滚动距离调试功能结束时,它实际上会重置滚动,因此似乎只要 div 是 event.target 它就可以从外部工作,就像在单击功能期间我可能没有正确选择它。

Edit2:我刚刚了解到我可以将 event.targets 缓存到变量中,并在 click 函数中使用 .get() 我确定我选择了正确的元素,所以它只是留下了如何scrollTop(0) 方法有效。

它们现在看起来像这样(还必须添加一个条件来限制加载事件):

全局变量:

$DivTestVar="";

点击:

$(document).on("click",".NavRowButton",function(event){
    var $targetButtonId=event.target.id;
    if($targetButtonId != $("#DisplayContentName").html()){
        $($DivTestVar).scrollTop(0);
        console.log($($DivTestVar).get());
        $("#Content").load("/load/login/"+$targetButtonId+".php");
        $("#DisplayContentName").html($targetButtonId);
        $("#Container3").find(".WindowBorder").css("top","0");
    };
});

滚动调试:

document.addEventListener('scroll',function(event){
    if(event.target.className==='Container'){
        $DivTestVar=event.target;
        var $currentScroll=$($DivTestVar).scrollTop();
        console.log($currentScroll);
        var $targetId=event.target.id;
        console.log($targetId);
    }
},true);

如果我在滚动之前单击 console.log($($DivTestVar).get());返回空,但如果在第一次滚动时它开始返回正确的 DOM 元素。无论如何,scrollTop(0) 都会被忽略。

Edit3:我只想留下一个小更新。从那以后,我已经放弃了我在这里尝试使用的具有类似效果但不像我试图实现的那样用户友好的方法。因此,我个人不再关心这个问题,但如果你正在阅读这篇文章并且遇到类似的问题,我已经多次遇到这个问题,效果更小,我现在认为它与 position:fixed;元素以及 scrollTop() 是如何处理它的,但我没有时间深入研究它,祝你好运和神速。

【问题讨论】:

  • 希望看到一个 jsfiddle 演示这个问题。
  • 标记为:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码问题本身。 - 请edit 您的问题包含重现错误的 JS/HTML/CSS sn-p(使用最少的代码)。见minimal reproducible example
  • “不起作用”不是很具有描述性。 准确地描述发生了什么以及它与你的希望和梦想有何不同!
  • @davidkonrad,对不起,我应该再次提到发布代码是不可行的,因为它是一个如此复杂的界面,我不知道是什么导致了问题。有人能够在没有太多信息的情况下为我的其他问题找到解决方案(可能也发生在他们身上),所以我希望有人也能在这里提供帮助。在任何情况下,我都会用我对另一个问题的更多详细信息来编辑问题。
  • @LightnessRacesinOrbit Ups 是的,我也会将其编辑到问题中。真的什么都没有发生。控制台上没有任何显示。没什么,和我的其他问题一样,它真的不起作用:|

标签: javascript jquery html scroll


【解决方案1】:

你试过纯JS版本吗?

document.getElementById('Container').scrollTop = 0

【讨论】:

  • 我实际上没有,也没有遇到它,所以我从来没有真正想过尝试它。无论如何它也不起作用:|
  • 在重新加载 div #Container 内容之前尝试使用 scrollTop(0)
  • 试过了,不行。 :|我会保持这样,只是为了确保它不会变得更糟。
【解决方案2】:

据我所知,你有两种可能。

1-使用 jQuery 滚动整个页面,直到到达 #Content div 位置的顶部。

2-您的 #Content 位于带有滚动条的 div 中,scrollTop(0) 将为此工作(例如:http://jsfiddle.net/zkp07abu/)。

【讨论】:

  • 不幸的是,我无法滚动整个页面,因为我将拥有超过 1 个可滚动的 div。我也很确定我选择了正确的 div,因为我实际上是在控制台。实时记录同一 div 的 scrollTop() 值以帮助调试另一个函数。我只是想在继续之前我现在应该解决这个问题。
  • 你可以尝试另一种方式,如果点击按钮后滚动,你可以找到父级或兄弟级“#Content”,根据body/html获取顶部并将scrollTop等于到那个变量。
  • 我添加了对问题的简要描述。除了它之外,#Content 树上没有任何内容滚动,因此我只能控制#Container3 上的滚动。将 scrollTop 设置为 0 是唯一的出路,如果我不能这样做,我将不得不改变我对这部分界面的看法。
  • 如果我错了,请纠正我。你需要的是,一旦你点击了一个按钮,#Content 就会滚动到顶部。现在我看到您添加了一个包含#Content 的#Content3。那么,作为第二点中给出的示例,对您想要实现的目标没有帮助吗?
  • 出于某种原因不...正如我在第二次编辑中添加的那样,我 100% 确定我正在尽可能地定位正确的 div,所以唯一剩下的就是 scrollTop 方法的工作原理。如果我添加一个 $($DivTestVar).scrollTop(0);到滚动调试功能的末尾它可以工作,它会将 scrollTop 值锁定在我告诉它的位置,但在该功能之外,我根本无法让它工作。使用 .get() 方法,我 100% 确定我遇到了 scrollTop 限制,但我不知道它是什么,所以我可以修复它...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多