Javascript 根据引导样例模板中的滚动效果

Javascript 根据引导样例模板中的滚动效果,javascript,jquery,scroll,Javascript,Jquery,Scroll,当用户按照页面中的“#subnav”div在高度上滚动到元素之外时,我尝试将元素固定到顶部 环顾谷歌,我成功地形成了以下函数和代码 function isScrolledIntoView(elem) { var docViewTop = $(window).scrollTop(); var docViewBottom = docViewTop + $(window).height(); var elemTop = $(elem).offset().top; va

当用户按照页面中的“#subnav”div在高度上滚动到元素之外时,我尝试将元素固定到顶部

环顾谷歌,我成功地形成了以下函数和代码

function isScrolledIntoView(elem)
{
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    if(docViewTop >= elemBottom){
    return true;
    }else{
    return false;
    }
}

$(window).scroll(function(){
    if(!$("#search_menu").hasClass("subnav-fixed")){
        if(!isScrolledIntoView($("#search_menu"))){
            $("#search_menu").addClass("subnav-fixed");
        }       
    }else{

        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();

        $("#window_top").html(docViewTop);
        $("#window_bottom").html(docViewBottom);
        $("#height").html(element_frm_top);

        if(docViewTop < element_frm_top < docViewBottom){
            $("#search_menu").removeClass("subnav-fixed");
        }
    }
});
函数是crolledintoview(elem)
{
var docViewTop=$(window.scrollTop();
var docViewBottom=docViewTop+$(window).height();
var elemTop=$(elem).offset().top;
var elemBottom=elemTop+$(elem).height();
如果(docViewTop>=elemBottom){
返回true;
}否则{
返回false;
}
}
$(窗口)。滚动(函数(){
if(!$(“#搜索菜单”).hasClass(“subnav固定”)){
如果(!isScrolledIntoView($(“#搜索菜单”)){
$(“#搜索菜单”).addClass(“subnav固定”);
}       
}否则{
var docViewTop=$(window.scrollTop();
var docViewBottom=docViewTop+$(window).height();
$(“#window_top”).html(docViewTop);
$(“#window_bottom”).html(docViewBottom);
$(“#高度”).html(元素_frm_top);
if(docViewTop
用这个。我能够添加subnav固定类,并将div位置固定到顶部。但我无法让它在向上滚动后返回其原始位置。想知道哪里出了问题,或者其他人是否有更好的解决方案。

我认为应该是这样

$(window).scroll(function(){
    if(!$("#search_menu").hasClass("subnav-fixed")){
        if(!isScrolledIntoView($("#search_menu"))){
            $("#search_menu").addClass("subnav-fixed");
        }       
    }else{
        if(isScrolledIntoView($("#search_menu"))){
            $("#search_menu").removeClass("subnav-fixed");
        }
    }
});
没有测试

也考虑更改<代码>(DOCVIEWTop>>LealButt)< /C> >代码> >(DOCTVIEWTROP> = EndoToTM)< /C>>/P> 编辑

这取决于你把“搜索”菜单放在哪里。假设它是top:40px,那么它应该是:

函数是crolledintoview(elem){
var docViewTop=$(window.scrollTop();
var docViewBottom=docViewTop+$(window).height();
var elemTop=$(elem).offset().top-40;
var elemBottom=elemTop+$(elem).height();
如果(docViewTop>=elemTop){
返回true;
}否则{
返回false;
}
}
$(窗口)。滚动(函数(){
变量$body=$('body'),
$menu=$(“搜索菜单”);
if(!$menu.hasClass(“subnav固定”)){
如果(isScrolledIntoView($menu)){
$menu.addClass(“subnav固定”);
}
}否则{
如果($(window.scrollTop()可爱;)按我希望的方式工作,谢谢
function isScrolledIntoView(elem) {
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = $(elem).offset().top - 40;
    var elemBottom = elemTop + $(elem).height();

    if (docViewTop >= elemTop) {
        return true;
    } else {
        return false;
    }
}

$(window).scroll(function () {
    var $body = $('body'),
        $menu = $("#search_menu");
    if (!$menu.hasClass("subnav-fixed")) {
        if (isScrolledIntoView($menu)) {
            $menu.addClass("subnav-fixed");
        }
    } else {
        if ($(window).scrollTop() <= 40) {
            $menu.removeClass("subnav-fixed");
        }
    }
});