javascript:当窗口到达顶部时

标签 javascript gsap

当我向下滚动时,CodePen 中的这段代码可以更改 div.box 的高度。当我反向滚动(向上滚动)时它也有效。当我到达窗口顶部时,它似乎不起作用。您知道当窗口到达顶部时我的代码有什么问题吗?或者需要添加什么才能使其在所有这 3 种情况下正常工作?

这是完整的 CodePen,这样你就可以明白我的意思:https://codepen.io/celli/pen/LYNYNQq

gsap.set(".box", {
  transformOrigin: "top left"
});

var lastScrollTop = 0;
window.addEventListener("scroll", function() {
  var st = window.pageYOffset || document.documentElement.scrollTop;
  if (st > lastScrollTop) {
    // down-scroll code
    gsap.to(".box", {
      scaleY: .2
    })

  } else if (st < lastScrollTop) {
    // up-scroll code
    gsap.to(".box", {
      scaleY: .5
    })

  } else if (window.pageYOffset == 0) {
    // when the window reaches the top
    gsap.to(".box", {
      scaleY: 1
    })
  }

  lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
}, false);

/*
gsap.to(".box", {
  scaleY:1,
  ease: "circ:out",
  scrollTrigger: {
    trigger: ".box",
    markers:true,
    start: "top top",
    toggleActions:"play none none reverse"
  }, 
}); 
*/
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.box {
  width: 100%;
  height: 200px;
  background-color: aqua;
  opacity: .5;
  position: fixed;
}

.sp {
  height: 1000px;
  width: 100%;
  background-color: #cccccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.4.2/gsap.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/ScrollTrigger.min.js"></script>

<div class="box"></div>
<div class="sp"></div>

最佳答案

您需要首先检查最具体的条件;在这种情况下,您应该首先检查 y 位置是否为 0,因为通过检查当前位置是否小于先前的条件也可以覆盖这一点。

  if(st === 0){
    // when the window reaches the top
    gsap.to(".box", {
      scaleY: 1
    })
  } else if (st > lastScrollTop) {
    // down-scroll code
    gsap.to(".box", {
      scaleY: .2
    })

  } else if (st < lastScrollTop) {
    // up-scroll code
    gsap.to(".box", {
      scaleY: .5
    })
  }

gsap.set(".box", {
  transformOrigin: "top left"
});

var lastScrollTop = 0;
window.addEventListener("scroll", function() {
  var st = window.pageYOffset || document.documentElement.scrollTop;
  if(st === 0){
    // when the window reaches the top
    gsap.to(".box", {
      scaleY: 1
    })
  } else if (st > lastScrollTop) {
    // down-scroll code
    gsap.to(".box", {
      scaleY: .2
    })

  } else if (st < lastScrollTop) {
    // up-scroll code
    gsap.to(".box", {
      scaleY: .5
    })
  }

  lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
}, false);
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.box {
  width: 100%;
  height: 200px;
  background-color: aqua;
  opacity: .5;
  position: fixed;
}

.sp {
  height: 1000px;
  width: 100%;
  background-color: #cccccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.4.2/gsap.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/ScrollTrigger.min.js"></script>

<div class="box"></div>
<div class="sp"></div>

关于javascript:当窗口到达顶部时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63256811/

相关文章:

javascript - 使用 Google-Maps-for-Rails 和 Rails 4 标记中心 map

javascript - 如何在JS ES6新Map(键,值)对中将值设置为对象

javascript - jQuery ScrollMagic 时间线最大不工作

html - 创建像门一样摆动的 CSS3 3D 旋转

javascript - 谷歌地图无法绘制

javascript - Express 和 WebSocket 在同一个端口上监听

javascript - 在没有 jquery 的较小 div 中滚动溢出 div 的可见部分

javascript - 带 #ID 的 TweenLite 变量

javascript - Greensock - 更改 TweenMax 过渡的速度

由图像组成的按钮的 Javascript 事件状态