javascript在小提琴中工作,但不在自己的页面中(即使脚本位于底部)

javascript在小提琴中工作,但不在自己的页面中(即使脚本位于底部),javascript,html,Javascript,Html,我正在尝试复制,当向下滚动时,它会将条粘贴到顶部;但是有一件事我不能确定 为了尽可能使用最基本的方法,我希望避免文件之间的链接,因此在相同的html文件中包含所有内容,遵循以下结构: <html> <head> <style> /* css here */ </style> </head> <body> <!-- html

我正在尝试复制,当向下滚动时,它会将条粘贴到顶部;但是有一件事我不能确定

为了尽可能使用最基本的方法,我希望避免文件之间的链接,因此在相同的html文件中包含所有内容,遵循以下结构:

<html>
    <head>
        <style>
            /* css here */
        </style>
    </head>
    <body>
        <!-- html here -->
        <script>
            // javascript here
        </script>
    </body>
</html>

但是没有帮助


我遗漏了什么?

将脚本更改为此应该可以解决问题

 <script>
     var myTop = document.getElementById('a8').offsetTop;
    window.onscroll = function() {
        var y = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
        if (y >= myTop) {
            a8.className = 'stick';
        }
        else {
            a8.className = '';
        }
    };
</script>

var myTop=document.getElementById('a8').offsetTop;
window.onscroll=函数(){
变量y=(document.documentElement&&document.documentElement.scrollTop)| | document.body.scrollTop;
如果(y>=myTop){
a8.className=‘stick’;
}
否则{
a8.className='';
}
};

我最初的回答是错误的,与加载无关,但与窗口的属性有关。

将脚本更改为此应该可以解决问题

 <script>
     var myTop = document.getElementById('a8').offsetTop;
    window.onscroll = function() {
        var y = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
        if (y >= myTop) {
            a8.className = 'stick';
        }
        else {
            a8.className = '';
        }
    };
</script>

var myTop=document.getElementById('a8').offsetTop;
window.onscroll=函数(){
变量y=(document.documentElement&&document.documentElement.scrollTop)| | document.body.scrollTop;
如果(y>=myTop){
a8.className=‘stick’;
}
否则{
a8.className='';
}
};

我最初的回答是错误的,与加载无关,但与窗口的属性有关。

我发现变量名
top
与最顶层的window.top不明确。因此,只需将其重命名为其他名称,如
top1
即可解决问题

var top1 = document.getElementById('a8').offsetTop;

我发现变量名
top
与window.top不明确,window.top是最顶层的框架。因此,只需将其重命名为其他名称,如
top1
即可解决问题

var top1 = document.getElementById('a8').offsetTop;

这是top变量的问题,但在另一种情况下,当页面加载完成后需要执行某些操作时,可以将脚本包装到函数中

document.addEventListener('DOMContentLoaded', function() {
   // your code here
}, false);
这也会起作用

    document.addEventListener('DOMContentLoaded', function() {
        var top = document.getElementById('a8').offsetTop;

    window.onscroll = function() {
        var y = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
        if (y >= top) {
            a8.className = 'stick';
        }
        else {
            a8.className = '';
        }
    };
    }, false);

这是top变量的问题,但在另一种情况下,当页面加载完成后需要执行某些操作时,可以将脚本包装到函数中

document.addEventListener('DOMContentLoaded', function() {
   // your code here
}, false);
这也会起作用

    document.addEventListener('DOMContentLoaded', function() {
        var top = document.getElementById('a8').offsetTop;

    window.onscroll = function() {
        var y = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
        if (y >= top) {
            a8.className = 'stick';
        }
        else {
            a8.className = '';
        }
    };
    }, false);


你有错误吗?因为在html文件中复制/粘贴代码是不可行的。如果您有任何扩展,可以尝试禁用扩展。没有错误。我在Chrome(我有很多扩展)和Firefox(我没有启用扩展)中试过。在任何情况下都不起作用。你是通过复制粘贴我的代码来获得粘性效果的吗,@robert?只要把整个东西包装在
window.onload=function(){…}。我指的是里面的整个剧本。包括
var!您在文章中提到jQuery函数,但在代码中没有提到。在您的真实代码中是否有任何带有
$
的代码?@IsmaelMiguel,正如我尝试的那样(请参阅问题中的最后一段代码),这正是我所做的。您有任何错误吗?因为在html文件中复制/粘贴代码是不可行的。如果您有任何扩展,可以尝试禁用扩展。没有错误。我在Chrome(我有很多扩展)和Firefox(我没有启用扩展)中试过。在任何情况下都不起作用。你是通过复制粘贴我的代码来获得粘性效果的吗,@robert?只要把整个东西包装在
window.onload=function(){…}。我指的是里面的整个剧本。包括
var!您在文章中提到jQuery函数,但在代码中没有提到。在您的真实代码中是否有任何带有
$
的内容?@IsmaelMiguel,当我尝试这一点时(参见问题中的最后一段代码),这正是我所做的。很有趣!如果我将其复制到我的代码中,它确实有效!我上面贴的和你的有什么区别?@Nit0另一个版本(和小提琴)也能工作的原因是,当你在函数中的位置时,顶部的局部变量优先于windowUnterstood的属性。谢谢是的,这是因为我在我发布的ans中提到的
top
var名称比您的编辑快了3分钟;D@S.Serp你有我的投票权,我不能给你奖牌。真有趣!如果我将其复制到我的代码中,它确实有效!我上面贴的和你的有什么区别?@Nit0另一个版本(和小提琴)也能工作的原因是,当你在函数中的位置时,顶部的局部变量优先于windowUnterstood的属性。谢谢是的,这是因为我在我发布的ans中提到的
top
var名称比您的编辑快了3分钟;D@S.Serp你有我的投票权,我不能给你奖牌,就这样!谢谢现在我的问题是,这两个答案几乎同时出现,而且都是正确的,所以我不知道哪一个应该被接受……我的答案比@robert的编辑版本要早;D但没有问题,正如您所希望的那样。注意:我使用Chrome Inspect功能发现了问题,并在函数中添加了一个断点。在那里,我看到在
if
条件下,var top是一个对象而不是一个数字!就这样!谢谢现在我的问题是,这两个答案几乎同时出现,而且都是正确的,所以我不知道哪一个应该被接受……我的答案比@robert的编辑版本要早;D但没有问题,正如您所希望的那样。注意:我使用Chrome Inspect功能发现了问题,并在函数中添加了一个断点。在那里,我看到在
if
条件下,var top是一个对象而不是一个数字!