代码之家  ›  专栏  ›  技术社区  ›  Spanky

当用户使用jQuery滚动时,使用多个div触发滚动事件

  •  0
  • Spanky  · 技术社区  · 7 年前

    我创建了两个div元素

    当用户滚动div#element-b和#header时,一个目标到达#header顶部附近,容器中的一个目标-element-a滚动到页面顶部并显示动画。

    目前我使用一个标题 <h1 id="animate-hd-b">Header One</h1> 从而触发动画。效果很好。但我想做的是使用多个标题,例如 < , <h1 id="animate-hd-c">Header Two</h1> <h1 id="animate-hd-d">Header Three</h1> #header-one-target

    var currentPlan = $('#element-A'),
      optionsPlan = $('#element-B'),
      combinedScroll = optionsPlan.scrollTop();
    
    optionsPlan.scroll(function() {
    
      var way = optionsPlan.scrollTop(),
        rate = Math.round(optionsPlan.find('#animate-hd-b').position().top - 70),
        area = currentPlan.scrollTop(),
        turf = Math.round(currentPlan.find('#header-one-target').position().top - 50),
        down = way > combinedScroll;
      combinedScroll = way;
    
      if (rate < 0 && down && turf) {
        currentPlan.not(':animated').animate({
          scrollTop: area + turf
        }, 700);
      }
    
      if (!down && area) {
        currentPlan.not(':animated').animate({
          scrollTop: 0
        }, 700);
      }
    });
    #element-A,
    #element-B {
      width: 50%;
      height: 100vh;
      float: left;
      overflow: auto;
    }
    
    #element-A {
      background: orange;
    }
    
    #element-B {
      background: yellow;
    }
    
    .content {
      padding-bottom: 100vh;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="element-A">
      <div class="content">
        <p>content</p>
        <p>content</p>
        <p>content</p>
        <p>content</p>
        <h1 id="header-one-target">Animate This Card</h1>
      </div>
    </div>
    
    <div id="element-B">
      <div class="content">
        <p>content</p>
        <p>content</p>
        <p>content</p>
        <p>content</p>
        <h1 id="animate-hd-b">Header One</h1>
      </div>
    </div>
    0 回复  |  直到 7 年前