【问题标题】:Javascript sticky div after scroll滚动后的Javascript粘性div
【发布时间】:2013-07-27 02:51:51
【问题描述】:

这个问题对这里的许多人来说可能是愚蠢的。我在纯 JS 中滚动后制作粘性 div。有些人可能会建议用 jQuery 制作它,但我对此不感兴趣。我需要的是类似于this 的东西。这里 div 一直移动到顶部,但我需要它有 60px 顶部。我做了一个脚本,但它不起作用。谁能帮我解决这个问题?

这是我的代码。

HTML

<div id="left"></div>
<div id="right"></div>

CSS

#left{
    float:left;
    width:100px;
    height:200px;
    background:yellow;
}

#right{
    float:right;
    width:100px;
    height:1000px;
    background:red;
    margin-top:200px;
}

JS

window.onscroll = function()
{
    var left = document.getElementById("left");



    if (left.scrollTop < 60 || self.pageYOffset < 60) {
        left.style.position = 'fixed';
        left.style.top = '60px';
    } else if (left.scrollTop > 60 || self.pageYOffset > 60) {
        left.style.position = 'absolute';
        left.style.margin-top = '200px';
    }

}

这是我需要实现的。左侧 div 在页面加载时必须有 margin-top:200pxposition:absolute。当用户滚动页面时,左边的 div 应该滚动,当它到达 top:60px; 时,它的位置和 margin-top 应该变为 position:fixedmargin-top:60px;

这里是FIDDLE

【问题讨论】:

  • JavaScript 区分大小写。 document.getElementByID 不正确。应该是document.getElementById。你在该行的末尾有一个流氓,。而且您没有定义一个名为left 的变量。您可能打算使用字符串"left"
  • 请参阅jsfiddle.net/bud4S/1 以获取具有上述评论者修复的固定版本。
  • 你的问题没有意义。尤其是最后一段。
  • 我能知道它没有意义的原因吗?
  • 我希望它像 jsbin.com/omanut/2 这样工作。但它必须有margin-top:60px;

标签: javascript scroll sticky


【解决方案1】:

CSS

#left {
  float:left;
  width:100px;
  height:200px;
  background:yellow;
  margin:200px 0 0;
}
#left.stick {
  position:fixed;
  top:0;
  margin:60px 0 0
}

添加了一个stick类,因此javascript不必做太多工作。

JS

    // set everything outside the onscroll event (less work per scroll)
var left      = document.getElementById("left"),
    // -60 so it won't be jumpy
    stop      = left.offsetTop - 60,
    docBody   = document.documentElement || document.body.parentNode || document.body,
    hasOffset = window.pageYOffset !== undefined,
    scrollTop;

window.onscroll = function (e) {
  // cross-browser compatible scrollTop.
  scrollTop = hasOffset ? window.pageYOffset : docBody.scrollTop;

  // if user scrolls to 60px from the top of the left div
  if (scrollTop >= stop) {
    // stick the div
    left.className = 'stick';
  } else {
    // release the div
    left.className = ''; 
  }
}

WORKING JSFIDDLE

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2021-06-27
    • 2016-07-31
    相关资源
    最近更新 更多