Javascript 滚动功能的怪异行为

Javascript 滚动功能的怪异行为,javascript,jquery,html,Javascript,Jquery,Html,我想要实现的是一个简单的滚动到功能,它总是会滚动到与scrollTop位置相同的点 我认为在这里使用window.scroll将是一个很好的方法,因为我能够读取当前的scrollTop值,因为我担心它不起作用,在某些浏览器上,我无法滚动(IE),在其他浏览器上(Chrome,Firefox),在单击连接到此函数的标记后。我得到了自动滚动的行为,有点向上,然后有点向下 我不想使用scrollTo插件或其他插件,因为它是我页面上唯一具有这种功能的地方 $(window).scroll(functio

我想要实现的是一个简单的滚动到功能,它总是会滚动到与scrollTop位置相同的点

我认为在这里使用window.scroll将是一个很好的方法,因为我能够读取当前的scrollTop值,因为我担心它不起作用,在某些浏览器上,我无法滚动(IE),在其他浏览器上(Chrome,Firefox),在单击连接到此函数的标记后。我得到了自动滚动的行为,有点向上,然后有点向下

我不想使用scrollTo插件或其他插件,因为它是我页面上唯一具有这种功能的地方

$(window).scroll(function () {
    var y = $(window).scrollTop();
    console.log(y);
    var mainBanner = $('header').height();

    if (y > 1 && y < mainBanner) {
        $('#slideUpHead').click(function(){
        $("html, body").animate({ scrollTop: mainBanner - y}, 600);
        });
    }
    else if(y < 1){
            $('#slideUpHead').click(function(){
        $("html, body").animate({ scrollTop: y + mainBanner}, 600);
            });
    }
    else {

    }


});
$(窗口)。滚动(函数(){
变量y=$(窗口).scrollTop();
控制台日志(y);
var mainBanner=$('header').height();
如果(y>1&&y
这是我的第二种方法,部分有效:

myScroll = function (){

    var mainBannerH = $('header').height();
    var y = $(window).scrollTop();

    if (y > 1 && y < mainBannerH) {
            $("html, body").animate({ scrollTop: mainBannerH - y}, 600);

    }
    else if(y < 1){

            $("html, body").animate({ scrollTop: y + mainBannerH}, 600);

    }
    else {
        console.log("It's not working properly");
    }

};



$('#slideUpHead').click(myScroll);
myScroll=function(){
var mainbanerh=$('header').height();
变量y=$(窗口).scrollTop();
如果(y>1&&y
目前,以下解决方案运行良好,多亏了艾哈迈德,我改变了我的方法,并以稍微不同的方式获得了scrollTop的位置,不是100%确定为什么,但它工作正常

myScrollTo = function (){

    var mainBannerH = $('header').height();
    var myPos = $('html,body').scrollTop();

    if ( myPos > 1 && myPos < mainBannerH) {
            $("html, body").animate({ scrollTop: mainBannerH - myPos}, 600);

    }
    else if(myPos < 1){

            $("html, body").animate({ scrollTop: myPos + mainBannerH}, 600);

    }
    else {
        console.log("It's not working properly");
    }

};



$('#slideUpHead').click(myScrollTo);
myScrollTo=函数(){
var mainbanerh=$('header').height();
var myPos=$('html,body').scrollTop();
如果(myPos>1&&myPos
您的
具有自动滚动行为,先向上一点,然后向下一点
,因为每当
窗口触发onscroll
事件时,您会一次又一次地附加不同的单击处理程序。我采用了第二种方法(编辑后文),但它只对y<1部分有效,对于介于1和mainBannerH之间的y,有时会向下滚动一点,有时向上滚动,但只有一次,自动滚动消失了。问题是我在页面加载时只收到一次scrollTop值,我如何重新检查它?找到了解决方案,您能否检查是否所有内容都可以改进?