【问题标题】:Is there a way to detect position of window without jquery有没有办法在没有 jquery 的情况下检测窗口的位置
【发布时间】:2013-01-29 18:29:01
【问题描述】:

这就是我想要做的,我在页面顶部有一个粘性导航,背景是透明的。但是当用户向下滚动并且内容位于导航下方时,我想更改导航的背景,使其不透明。现在我已经实现了这一点,但我的问题是:当用户滚动回页面顶部时,导航背景是否可能再次变得透明?

例如:用户加载页面,导航是透明的,用户向下滚动,导航背景变为非透明,然后用户滚动回到页面顶部。是否可以让导航背景再次变得透明? 我也试图在不使用 jquery 的情况下实现这一点!所以请只用原始的javascript回答!

___JS___
window.onscroll = function nav_bg(){
var header = document.getElementById("header");
header.setAttribute('style','background-color:rgba(0,0,0,1);')
}


___CSS___
#header{background-color:rgba(0,0,0,.4);}

这是我当前的代码,但是当用户滚动回顶部时,背景保持不透明。

【问题讨论】:

  • 您是否尝试过深入研究 jQuery 代码,看看他们是如何做到的?
  • jQuery 只是 JavaScript,所以我假设是这样。

标签: javascript css onscroll


【解决方案1】:

这就是 jQuery 的做法:

var doc = document.documentElement, body = document.body;
var left = (doc && doc.scrollLeft || body && body.scrollLeft || 0);
var top = (doc && doc.scrollTop  || body && body.scrollTop  || 0);

一旦你知道窗口滚动到哪里,你只需要绑定到“滚动”事件(如果没有 jQuery,绑定会有点棘手,只是因为旧版浏览器有不同的方法来处理事件绑定)

var addEvent = (function( window, document ) {
 if ( document.addEventListener ) {
  return function( elem, type, cb ) {
   if ( (elem && !elem.length) || elem === window ) {
    elem.addEventListener(type, cb, false );
   }
   else if ( elem && elem.length ) {
    var len = elem.length;
    for ( var i = 0; i < len; i++ ) {
     addEvent( elem[i], type, cb );
    }
   }
  };
 }
 else if ( document.attachEvent ) {
  return function ( elem, type, cb ) {
   if ( (elem && !elem.length) || elem === window ) {
    elem.attachEvent( 'on' + type, function() { return cb.call(elem, window.event) } );
   }
   else if ( elem.length ) {
    var len = elem.length;
    for ( var i = 0; i < len; i++ ) {
     addEvent( elem[i], type, cb );
    }
   }
 };
}
})( this, document );
// Example Usage
addEvent( window, 'scroll', function() {
 //Test scroll position and set style
});

(取自this page

【讨论】:

  • 所以left变量包含x滚动位置,top变量包含y滚动位置?
  • 是的。我正在挖掘你现在需要的事件绑定代码
  • 哇,你帮了大忙!我尝试了 document.documentElement.scrollTop() 但它返回 scrollTop 不是一个函数,所以我决定把我的麻烦带到这里
猜你喜欢
  • 1970-01-01
  • 2020-11-14
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多