Javascript 当我声明的变量不等于0时,为什么我的变量变为0?

Javascript 当我声明的变量不等于0时,为什么我的变量变为0?,javascript,html,variables,alert,scrolltop,Javascript,Html,Variables,Alert,Scrolltop,好的,我的目标是首先计算页面顶部和浏览者所在页面部分之间的距离,因此基本上是浏览者看不到的页面顶部部分,这个区域的像素距离(仅垂直) 因此,当他们进入另一个页面时: 函数codeAddress(){$(“html,body”)。动画({scrollTop:scrollTop“});} ,将使用在上一个html页面上向下滚动的像素量向下滚动,此距离将存储在“scrollTop”变量中 但由于它不起作用,我想测试“scrollTop”变量会给出什么值,而警报(scrollTop)给了我值“0”。但是

好的,我的目标是首先计算页面顶部和浏览者所在页面部分之间的距离,因此基本上是浏览者看不到的页面顶部部分,这个区域的像素距离(仅垂直)

因此,当他们进入另一个页面时:

函数codeAddress(){$(“html,body”)。动画({scrollTop:scrollTop“});}

,将使用在上一个html页面上向下滚动的像素量向下滚动,此距离将存储在“scrollTop”变量中

但由于它不起作用,我想测试“scrollTop”变量会给出什么值,而警报(scrollTop)给了我值“0”。但是当我使用alert(…)时,在。。。我给出了“=”scrollTop=…”后面的确切值,我得到了正确的值。结果是变量的值变为0,而“=”符号后面的所有值都不等于0

我想不出我没看到什么,有没有线索

这是我整个页面的一个JSFIDLE,中间有一个按钮,在我的页面中,它给出了第二个警报的“0”值,而在小提琴中,它给出了“undefined”值,仍然很奇怪


函数codeAddress(){$(“html,body”).animate({scrollTop:“scrollTop”});}
window.onload=代码地址;
var scrollTop=$('body,html')。scrollTop()
函数myFunction(){
警报($('body,html')。scrollTop()
警报(滚动顶部)};

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

我假设您在取消公告的滚动事件中保存最后一个位置,或者单击导航并将其保存到会话/本地存储

然后在新页面上滚动到该位置。类似于

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);
  }
});

“scrollTop”
可能不是要设置动画的有效值?这是可能的,但为什么警报(scrollTop)和警报($('body,html')。scrollTop()会给出一个不同的值,这让我很困惑。因为:var scrollTop=$('body,html').scrollTop()…嘿,谢谢你的快速回答,看看我的问题,但是我对Javascript不是很在行,以我的例子来说,我使用'scrollTop'作为变量,并将其转换为整数而不是字符串,不是更容易吗?而且我也不明白为什么这两个警报似乎给了我不同的值,因为它们应该匹配,对吗?因为不使用该变量的警报确实给了我正确的Y位置偏移量,所以如果我存储它,我可以使用它向下滚动下一页,但由于某种原因,当我将其转换为变量时,它会变为零?实际上不是,
$('body,html')。scrollTop()
是一个jquery函数,您正在调用该函数,得到的结果是一个数字,而不是您想要的数字(要获取当前的Y滚动位置,请使用
窗口。scrollY
,这应该保存在上一页)
scrollTop
窗口相同。scrollTop
不存在。Dominic,我明白你的意思,但我已经更改了它,第二个值(我使用变量的地方)仍然变为“0”。请查看这把小提琴:还有,当我将“window.pageYOffset”替换为您所说的“window.yScroll或window.yScroll”时,我从两个警报中得到了未定义的值,而不是一个值和一个“0”。它是
window.scrollY
而不是
yScroll
yScroll
;)但是无论如何window.pageYOffset也应该可以工作-它们完全是一样的(pageYOffset只是它的别名)注意,我将这些函数附加到了window上,但最好是通过在它们上执行addEventListener来悄悄地将事件添加到元素中。我最终发现了问题所在。显然,我必须在使用它的函数中声明ScrollTop变量,而不是直接在它上面声明。还是谢谢你。
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);
  }
});