【问题标题】:Why does my variable turn into 0 when what I declared as that variable does not equal 0?当我声明的变量不等于 0 时,为什么我的变量会变成 0?
【发布时间】:2017-04-04 11:01:31
【问题描述】:

好的,所以我的目标是首先计算页面顶部和查看者所在页面部分之间的距离,所以基本上查看者看不到的页面顶部部分,以像素为单位的距离此区域(仅垂直)。

这样当他们进入另一个页面时:

"函数codeAddress() {$("html, body").animate({ scrollTop: "scrollTop" });}"

,将它们向下滚动的像素数量与它们在前一个 html 页面上向下滚动的像素量相同,并且该距离将存储在“scrollTop”变量中。

但由于它不起作用,我想测试“scrollTop”变量会给出什么值,而 alert(scrollTop) 给了我值“0”。但是当我使用 alert(...) ,并且在 ... 我给出 exactly '=' "scrollTop = ..." 背后的内容时,我得到了正确的值。所以事实证明,变量的值变成了 0,而 '=' 符号后面的所有值都不等于 0。

我不知道我没有看到什么,有人有什么线索吗?

这是我的整个页面的 JSFiddle,中间有一个按钮,在我的页面中它给出了第二个警报的“0”值,而在 Fiddle 中它给出的“未定义”仍然很奇怪..

https://jsfiddle.net/56sb4gty/

<script type="text/javascript">                                         

    function codeAddress() {$("html, body").animate({ scrollTop: "scrollTop" });}
    window.onload = codeAddress;

    var scrollTop = $('body, html').scrollTop()

      function myFunction() { 
                              alert($('body, html').scrollTop())
                              alert(scrollTop)      };

</script>
    <script src="scrollTop.js"></script>

【问题讨论】:

  • "scrollTop" 可能不是动画到的有效值?
  • 这是可能的,但是为什么 alert(scrolltop) 和 alert($('body, html').scrollTop()) 给出不同的值,这让我很困惑。自: var scrollTop = $('body, html').scrollTop() ..

标签: javascript html variables alert scrolltop


【解决方案1】:

正如 adeneo 所说,您正在尝试滚动到一个名为“scrollTop”的字符串,这没有任何意义,它应该是 scrollTop: SOME_NUMBER

我假设您将最后一个位置保存在去抖滚动事件上,或导航单击并将其保存到 session/localStorage。

然后在新页面上滚动到该位置。有点像..

document.addEventListener('DOMContentLoaded', function() {
  try {
    // On load see if there is a scroll pos and go there.
    var lastYPos = +localStorage.getItem('scrollYPos');
    if (lastYPos) {
      console.log('Setting scroll pos to:', lastYPos);
      window.scrollTo(0, lastYPos);
    }

    // On navigation click or debounced resize event..
    someResizeOrClickEvent(() => localStorage.setItem('scrollYPos', window.scrollY));
  } catch (error) {
    // This will happen in Safari private browsing when accessing localStorage
    console.error(error);
  }
});

【讨论】:

  • 嘿,感谢您的快速回答并查看我的问题,但我对 Javascript 不太擅长,以我使用“scrollTop”作为变量的示例为例,这不是更容易吗?把它变成一个整数而不是一个字符串?而且我也不明白为什么这两个警报似乎给了我不同的值,因为它们应该匹配,对吗?因为不使用变量的警报确实给了我正确的 Y 位置偏移量,所以如果我存储它,我可以使用它向下滚动下一页,但由于某种原因,当我将它变成变量时它变成零?跨度>
  • 实际上不是,$('body, html').scrollTop() 是一个 jquery 函数,您正在调用它并获取其结果是一个数字,而不是您想要的数字(获取当前 Y 滚动位置使用 @987654326 @,这应该已经保存在您的上一页上)。 scrollTop 与不存在的window.scrollTop 相同
  • 嘿,多米尼克,我明白你的意思,但我已经改变了它,第二个值(我使用变量的地方)仍然变成“0”。看看这个小提琴请:jsfiddle.net/0wj7hw50/3 当我用“window.yScroll 或 window.Yscroll”替换你所说的“window.pageYOffset”时,我从两个警报中得到未定义而不是一个值和一个“0”。
  • 它是 window.scrollY 不是 yScrollYscroll ;) 但无论如何 window.pageYOffset 也应该工作 - 它们是完全相同的东西(pageYOffset 只是一个别名为它)jsfiddle.net/0wj7hw50/4 请注意,我将这些函数附加到窗口,但最好通过在元素上执行 addEventListener 来不显眼地向元素添加事件
  • 啊,我终于发现了问题所在。显然我必须在我使用它的函数中声明我的 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
  • 2021-05-09
相关资源
最近更新 更多