【问题标题】:flow item animation trigger by divdiv 触发流项目动画
【发布时间】:2019-02-25 12:47:17
【问题描述】:

这是我制作的虚拟页面

#over-flow-menu {
  width: 3.5rem;
  height: 3.5rem;
  display: block;
  position: fixed;
  background: white;
  border-radius: 50%;
  right: 2rem;
  top: 2rem;
  font-size: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  letter-spacing: 1px;
  color: #666;
}

.grey, .white {
  width: 100%;
  height: 300px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
  letter-spacing: 2px;
}

.grey {
  background: #ddd;
  color: white;
}

.white {
  color: #666;
}
<div id="over-flow-menu">MENU</div>
<div class="grey">GRAY</div>
<div class="white">WHITE</div>
<div class="grey">GRAY</div>
<div class="white">WHITE</div>
<div class="grey">GRAY</div>
<div class="white">WHITE</div>
<div class="grey">GRAY</div>
<div class="white">WHITE</div>

我的目标是让流动菜单的背景颜色发生变化 当它滚动到 GREY 部分时,菜单的背景颜色将变为白色,当它向下滚动到下一个白色部分时,背景将变回白色等等。

我尝试使用像 srollMagic 这样的插件 但想知道是否有更好的理由来实现这个目标

【问题讨论】:

    标签: javascript animation scroll scrollview


    【解决方案1】:

    请将以下代码添加到您的 html 中。这可能不是最好的解决方案,但很有效。

    <script>
    
    window.onscroll = function (e) {
    var x = window.scrollY;
    var y = x/300;
    var z = Math.floor(y);
    var t = z%2;
        if(t == 1  ){
         document.getElementById("over-flow-menu").style.background = "#ddd";
        }
        else{
            document.getElementById("over-flow-menu").style.background = "white";
        }
    }
    </script>
    

    【讨论】:

      【解决方案2】:

      使用 Javascript 你可以实现如下脚本

      var divHight = document.getElementsByClassName('grey')[0].offsetHeight;
      window.onscroll = function (e) {
          var scrollAt = Math.floor(window.scrollY/divHight);
          document.getElementById("over-flow-menu").style.background = (scrollAt%2 == 1? "#ddd": "white") ;
      }
      #over-flow-menu {
        width: 3.5rem;
        height: 3.5rem;
        display: block;
        position: fixed;
        background: white;
        border-radius: 50%;
        right: 2rem;
        top: 2rem;
        font-size: 8px;
        display: flex;
        align-items: center;
        justify-content: center;
        letter-spacing: 1px;
        color: #666;
      }
      
      .grey, .white {
        width: 100%;
        height: 300px;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 30px;
        letter-spacing: 2px;
      }
      
      .grey {
        background: #ddd;
        color: white;
      }
      
      .white {
        color: #666;
      }
      <div id="over-flow-menu">MENU</div>
      <div class="grey">GRAY</div>
      <div class="white">WHITE</div>
      <div class="grey">GRAY</div>
      <div class="white">WHITE</div>
      <div class="grey">GRAY</div>
      <div class="white">WHITE</div>
      <div class="grey">GRAY</div>
      <div class="white">WHITE</div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 2022-01-08
        相关资源
        最近更新 更多