【问题标题】:Changing opacity when scrolling滚动时更改不透明度
【发布时间】:2017-04-23 20:36:12
【问题描述】:

我的目标是在向下滚动时更改 DIV 的不透明度。过渡顺利很重要!

  • body的scrollTop为400时,Test-div的不透明度应该为1。
  • body的scrollTop为800时,Test-div的不透明度应该为0。

这是我目前拥有的,但它不起作用。

window.addEventListener('scroll', function() {
    if (document.body.scrollTop > 400) {
      var currScrollPos2 = document.body.scrollTop;
      document.getElementById('test').style.opacity = -currScrollPos2 / 400 + 2;
    }
  }
};
* {
  margin: 0;
  padding: 0;
}

body {
  height: 2000px;
  width: 100%;
}

#test {
  width: 200px;
  height: 200px;
  background-color: red;
  position: fixed;
}
<div id="test"></div>

【问题讨论】:

    标签: javascript css


    【解决方案1】:

    您很接近,但 body.scrollTop 属性 does not work in all browsers

    我冒昧地清理了您的标记和代码。例如,您在 JavaScript 末尾缺少右括号。你的 CSS 标记中还有一些多余的规则,我删除了。

    var test = document.getElementById('test');
    window.addEventListener('scroll', function(e) {
      // http://stackoverflow.com/a/28633515/962603
      var scroll = window.pageYOffset || document.documentElement.scrollTop ||
                    document.body.scrollTop || 0;
      test.style.opacity = Math.max(0, Math.min(1, -scroll / 400 + 2));
    });
    * {
      margin: 0;
      padding: 0;
    }
    
    body {
      height: 2000px;
    }
    
    #test {
      position: fixed;
      width: 200px;
      height: 200px;
      background-color: red;
    }
    <div id="test"></div>

    【讨论】:

      【解决方案2】:

      我必须将 document.body.scrollTop 替换为 window.pageYOffset 才能使其正常工作。
      见:document.body.scrollTop Firefox returns 0

      window.addEventListener('scroll', function() {
          var currScrollPos2 = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
          if (currScrollPos2 > 400) {
            document.getElementById('test').style.opacity = -currScrollPos2 / 400 + 2;
          }
        }
      );
      * {
        margin: 0;
        padding: 0;
      }
      
      body {
        height: 2000px;
        width: 100%;
      }
      
      #test {
        width: 200px;
        height: 200px;
        background-color: red;
        position: fixed;
      }
      <div id="test"></div>

      【讨论】:

        【解决方案3】:

        只是语法错误。将 '}' 替换为 ')' 在 JS 代码的末尾。 顺便说一句,我建议使用 document.addEventListener 而不是 window.addEventListener

        这是正确的代码:https://jsfiddle.net/ye082ae9/

        document.addEventListener('scroll', function(e) {
                    if (document.body.scrollTop > 400) {
                        var currScrollPos2 = document.body.scrollTop;
                        document.getElementById('test').style.opacity = -currScrollPos2/400 + 2;
                        }
                    });
        

        【讨论】:

        • 您能否至少解释一下这些差异或为什么它不适用于window
        • 基本上 window 是浏览器的窗口,document 是其中的 HTML 页面。您可以在此处找到更多详细信息。 eligeske.com/jquery/…
        • 该链接根本没有帮助。例如,它没有解释为什么我通过windowdocument 都获得滚动事件。其实它们是完全相同的事件,因为滚动事件bubbles to the default view
        【解决方案4】:

        您的代码运行良好,最后有一点拼写错误。只需将 }; 更改为 );

        window.addEventListener('scroll', function() {
                if (document.body.scrollTop > 400) {
                    var currScrollPos2 = document.body.scrollTop;
                    document.getElementById('test').style.opacity = -currScrollPos2/400 + 2;
                    }
                }
        );
        

        【讨论】:

        • 应该同时存在})。在您的代码中,该函数永远不会关闭。
        • 它实际上有 } 它只是上面一行
        • 啊,我被糟糕的缩进弄糊涂了。
        猜你喜欢
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        相关资源
        最近更新 更多