Javascript 浮动侧菜单,使其停在底部

Javascript 浮动侧菜单,使其停在底部,javascript,jquery,animation,Javascript,Jquery,Animation,我在左边(绿色)有一个浮动菜单, 我让它在200像素后开始移动。现在我需要停下来 不要越过页脚(蓝色)区域。 有没有办法让我的JS更好 这件事是,我不能检查这个滚动事件,因为动画 在我滚动之后继续,所以需要以其他方式完成 那么,如何使动画在页脚之前的末尾停止?在$(窗口)中。滚动功能您是否检查过浮动div的底部位置是否小于或等于页脚元素的顶部位置。在$(窗口)中.scroll函数是否已检查浮动div的底部位置是否小于或等于页脚元素的顶部位置。$.fn.menufloatter=函数(选项){ $

我在左边(绿色)有一个浮动菜单, 我让它在200像素后开始移动。现在我需要停下来 不要越过页脚(蓝色)区域。 有没有办法让我的JS更好

这件事是,我不能检查这个滚动事件,因为动画 在我滚动之后继续,所以需要以其他方式完成

那么,如何使动画在页脚之前的末尾停止?

$(窗口)中。滚动
功能您是否检查过浮动div的底部位置是否小于或等于页脚元素的顶部位置。

$(窗口)中.scroll
函数是否已检查浮动div的底部位置是否小于或等于页脚元素的顶部位置。

$.fn.menufloatter=函数(选项){
$.fn.menuFloater = function(options) {
    var opts = $.extend({ startFrom: 0, offsetY: 0, attach: '', duration: 50 }, options);
    // opts.offsetY
    var $obj = this;
    $obj.css({ position: 'absolute' /*, opacity: opts.opacity */ });


    /* get the bottom position of the parent element */
    var parentBottomPoint = $obj.parent().offset().top + $obj.parent().height() ; 
    var topMax = $obj.parent().height() - $obj.innerHeight() + parseInt($obj.parent().css('padding-top')); //get the maximum scrollTop value
    if ( topMax < 0 ) {
        topMax = 0;
    }

    console.log(topMax);

    $(window).scroll(function () { 
        $obj.stop(); // stop all calculations on scroll event
        //  console.log($(document).scrollTop() + " : " + $obj.offset().top);

        /* get to bottom position of the floating element */
        var isAnimated = true;
        var objTop= $obj.offset().top;
        var objBottomPoint = objTop + $obj.outerHeight();

        if ( ( $(document).scrollTop() > opts.startFrom || (objTop - $(document).scrollTop()) > opts.startFrom ) && ( $obj.outerHeight() < $(window).height() ) ){
            var adjust;
            ( $(document).scrollTop() < opts.startFrom ) ? adjust = opts.offsetY : adjust = -opts.startFrom + opts.offsetY;
            // and changed here to take acount the maximum scroll top value
            var newpos = ($(document).scrollTop() + adjust );
            if ( newpos > topMax ) {
                newpos = topMax;
            }
            $obj.animate({ top: newpos }, opts.duration, function(){ isAnimated = false } );
        }
        else {
            $obj.stop();
        }
    });

};
var opts=$.extend({startFrom:0,offsetY:0,attach:'',duration:50},options); //选择偏移 var$obj=此; $obj.css({position:'absolute'/*,opacity:opts.opacity*/}); /*获取父元素的底部位置*/ var parentBottomPoint=$obj.parent().offset().top+$obj.parent().height(); var topMax=$obj.parent().height()-$obj.innerHeight()+parseInt($obj.parent().css('padding-top'));//获取最大scrollTop值 if(topMax<0){ topMax=0; } 控制台日志(topMax); $(窗口)。滚动(函数(){ $obj.stop();//停止滚动事件上的所有计算 //log($(document.scrollTop()+“:”+$obj.offset().top); /*到达浮动元素的底部位置*/ var isAnimated=真; var objTop=$obj.offset().top; var objbotcompoint=objTop+$obj.outerHeight(); if($(document.scrollTop()>opts.startFrom | | |(objTop-$(document.scrollTop())>opts.startFrom)&($obj.outerHeight()<$(window.height())){ var调整; ($(文档).scrollTop()topMax){ newpos=topMax; } $obj.animate({top:newpos},opts.duration,function(){isAnimated=false}); } 否则{ $obj.stop(); } }); };
$.fn.menufloatter=函数(选项){
var opts=$.extend({startFrom:0,offsetY:0,attach:'',duration:50},options);
//选择偏移
var$obj=此;
$obj.css({position:'absolute'/*,opacity:opts.opacity*/});
/*获取父元素的底部位置*/
var parentBottomPoint=$obj.parent().offset().top+$obj.parent().height();
var topMax=$obj.parent().height()-$obj.innerHeight()+parseInt($obj.parent().css('padding-top'));//获取最大scrollTop值
if(topMax<0){
topMax=0;
}
控制台日志(topMax);
$(窗口)。滚动(函数(){
$obj.stop();//停止滚动事件上的所有计算
//log($(document.scrollTop()+“:”+$obj.offset().top);
/*到达浮动元素的底部位置*/
var isAnimated=真;
var objTop=$obj.offset().top;
var objbotcompoint=objTop+$obj.outerHeight();
if($(document.scrollTop()>opts.startFrom | | |(objTop-$(document.scrollTop())>opts.startFrom)&($obj.outerHeight()<$(window.height())){
var调整;
($(文档).scrollTop()topMax){
newpos=topMax;
}
$obj.animate({top:newpos},opts.duration,function(){isAnimated=false});
}
否则{
$obj.stop();
}
});
};

我已经完美地解决了这个问题(希望如此)
在你们的帮助下,我被释放了
用于浮动粘性框的jQuery插件:



我已经完美地解决了这个问题(希望如此)
在你们的帮助下,我被释放了
用于浮动粘性框的jQuery插件:



我想你以前问过这个问题。如果两者相同,请尝试编辑上一个,而不是发布新的。对不起,我不知道我可以编辑:)我想你以前问过这个问题。如果两者相同,请尝试编辑上一个,而不是发布新的。抱歉,我不知道我可以编辑:)不能这样做。当我滚动并触发$(window).scroll时,动画开始生效。我不知道开始后菜单会放在哪里,不能这样做。当我滚动并触发$(window).scroll时,动画开始生效。我也不知道开始后菜单会放在哪里,+1证实了这一点。不过里面有些多余的东西。例如,“isAnimated”值是不相关的,因为动画将被停止。我所做的只是添加所需的内容,以防止菜单降低到必须的程度,我没有删除任何原始代码,将删除无用的内容作为练习留给原作者:)是的,太好了!非常好,谢谢!我现在会清理代码,我知道里面有一些不相关的东西。感谢为什么要检查-if(topMax<0)?无论如何,我不认为这是必要的,因为我禁用了动画,如果窗口大小小于菜单,因为用户必须看到所有。哦,你知道-以防万一:)+1确认这是可行的。不过里面有些多余的东西。例如,“isAnimated”值与