【问题标题】:Reposition DIV after scrolling滚动后重新定位 DIV
【发布时间】:2014-08-31 21:16:35
【问题描述】:

我有一个导航栏,向下滚动后会重新定位。它适用于位置:固定,但在滚动时,我希望它像网站上的所有其他内容一样向上移动。如果用户停止滚动,它应该重新定位在顶部:

这是一个演示:

http://jsfiddle.net/gvjeyywa/7/

但我希望它是 position:absolute(尤其是在 Ipad 上滚动) http://jsfiddle.net/gvjeyywa/5/

如何让 JS 覆盖我的 CSS?这是我的 JS:

 var isInAction = false;
  var lastScrollTop = 0;
   $(window).scroll(function(event){
   var st = $(this).scrollTop();
   if (st > lastScrollTop){
   if (!isInAction){
       isInAction = true;
       $( "#navigation" ).animate({
           top: "-" + $("#navigation").innerHeight() + "px"
       }).delay(1000).animate({
           top: "0px"
       }, 800, function() {
           isInAction = false;
          });
      }
      }
     lastScrollTop = st;
 });

【问题讨论】:

  • @Moshtaf 这是我的新问题
  • @ Moshtaf 基本上是这样的:我在 top:0px 有一个 div,位置:absolute... 用户滚动,所以它消失了。但是经过短暂的延迟后,它会从顶部滑动到顶部:0px……如果用户进一步/再次向下滚动,同样的效果……

标签: javascript jquery css scroll


【解决方案1】:

乍一看,我认为这是不可能的,但经过一些尝试,此代码已创建。
我花了很长时间编写这段代码并使用了几种技术,希望对您有所帮助。 也许还有更简单的解决方案!

var bitFlag = false;
var lastScrollTop = 0;
var timeoutId;
$navigation = $("#navigation");
$(window).scroll(function (event) {
    var intWindowTop = $(window).scrollTop();
    var intElementBottom = $navigation.offset().top + $navigation.innerHeight();
    if (intWindowTop > lastScrollTop) {
        if (!bitFlag) {
            $navigation.css("position", "absolute").css("top", intWindowTop + "px");
            bitFlag = true;
        }
        if (timeoutId) {
            clearTimeout(timeoutId);
        }
        timeoutId = setTimeout(function () {
            if (intWindowTop > intElementBottom) {
                intDelayTime = setTimeout(function () {
                    $navigation.animate({
                        top: intWindowTop + "px"
                    }, 800);
                }, 500);
            }
        }, 100);
    } else {
        $navigation.css("position", "fixed").css("top", "0px");
        bitFlag = false;

    }
    lastScrollTop = intWindowTop;
});

}, 500); 部分控制延迟时间(以毫秒为单位),}, 800); 部分控制向下滑动动画的速度。

Check JSFiddle Demo

【讨论】:

  • 它在 JSFiddle 中完美运行,但不知何故它不在我的网站上? cyrill-kuhlmann.de/index.php/projects
  • ... 抱歉,非常感谢您的帮助!但在我的网站上,它告诉我“TypeError:'undefined' 不是一个对象(评估 '$navigation.offset().top')”,我只是不知道它是什么意思。在 JS 中,我只是一个初学者……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 2014-04-14
  • 2013-02-10
相关资源
最近更新 更多