如何检测jQuery中是否滚动了特定元素或div?

时间:2018-11-04 17:48:43

标签: javascript jquery html css

我正在尝试确定何时滚动特定内容(在中间)。 Here is a demo

情况1::滚动中间的图像时,浅绿色列的内容应位于fixed位置。

情况2::滚动中间(沙)列时,浅绿色列的内容应位于initial位置

所以主要问题是如何检测何时滚动了特定元素。

.fixed-aqua {
  position: fixed;
  top: 0px;
}
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="w3-row">

  <div class="w3-col m3 s3">
    <div class="w3-white">
      Nulla eu tortor eu justo ultricies consequat. Suspendisse potenti. Curabitur sollicitudin metus lobortis magna faucibus feugiat. Nunc tempus a ante fermentum viverra. Nunc id nulla sed tortor pellentesque eleifend at id mi.
    </div>

  </div>

  <div class="w3-col m6 s6 w3-sand">
    <div id="img">
      <img width="100%" src="https://cdn.images.express.co.uk/img/dynamic/galleries/x701/156708.jpg">
    </div>

    <b>When image is scrolled, set aqua content to fixed</b> consectetur adipiscing elit. Curabitur egestas quam vitae libero scelerisque, id elementum nisi porttitor. Curabitur porttitor nisl id purus tristique elementum. Nullam sed varius dolor. Fusce
    commodo feugiat felis eu egestas. Nunc suscipit metus non suscipit condimentum. Aenean ullamcorper libero sed nunc ullamcorper, quis aliquet odio bibendum. Donec facilisis fringilla neque, at pretium lacus porta vitae. Donec a rhoncus tellus.Nulla
    eu tortor eu justo ultricies consequat. Suspendisse potenti. Curabitur sollicitudin metus lobortis magna faucibus feugiat. Nunc tempus a ante fermentum viverra. Nunc id nulla sed tortor pellentesque eleifend at id mi. Vivamus fermentum tincidunt neque,
    eu rutrum elit sollicitudin vitae. Integer viverra a ex sit amet egestas. Donec viverra tempus leo et commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam ante tortor, volutpat ac risus nec, pretium
    vehicula augue. In hac habitasse. Integer viverra a ex sit amet egestas. Donec viverra tempus leo et commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam ante tortor, volutpat ac risus nec, pretium
    vehicula augue. <b>when the middle column is scrolled aqua column should not be fixed anymore.</b>
    <div class="w3-pink">
      Suspendisse potenti. Curabitur sollicitudin metus lobortis magna faucibus feugiat. Nunc tempus a ante fermentum viverra. Nunc id nulla sed tortor pellentesque eleifend at id mi. Vivamus fermentum tincidunt neque, eu rutrum elit sollicitudin vitae. Integer
      viverra a ex sit amet egestas. Donec viverra tempus leo et commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam ante tortor, volutpat ac risus nec, pretium vehicula augue. In hac habitasse Suspendisse
      potenti. Curabitur sollicitudin metus lobortis magna faucibus feugiat. Nunc tempus a ante fermentum viverra. Nunc id nulla sed tortor pellentesque eleifend at id mi. Vivamus fermentum tincidunt neque, eu rutrum elit sollicitudin vitae. Integer viverra
      a ex sit amet egestas. Donec viverra tempus leo et commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam ante tortor, volutpat ac risus nec, pretium vehicula augue. In hac habitasse
    </div>




  </div>

  <div class="w3-col m3 s3">
    <div class="w3-aqua">
      Nulla eu tortor eu justo ultricies consequat. Suspendisse potenti. Curabitur sollicitudin metus lobortis magna faucibus feugiat. Nunc tempus a ante fermentum viverra. Nunc id nulla sed tortor pellentesque eleifend at id mi.
    </div>

  </div>


</div>

2 个答案:

答案 0 :(得分:1)

var imgParent = document.getElementById( 'img' );
var imgChildHeight = imgParent.firstElementChild.offsetHeight;
var aquaColumn = document.querySelector( '.fixed-aqua' );

window.addEventListener( 'scroll', function () {
    var top = this.scrollY;
    if ( top >= imgChildHeight ) {
        aquaColumn.style.position = 'initial';
    } else {
        aquaColumn.style.position = 'fixed';
    }
} );

答案 1 :(得分:1)

JsFiddle Solution
W3Schools Documentation

  window.onscroll = function() {
  myFunction()
};

var stickyStart = document.querySelector("#img").offsetTop;
var stickyEnd = document.querySelector("#end").offsetTop;

function myFunction() {
  if (window.pageYOffset >= stickyStart && window.pageYOffset < stickyEnd)
    document.querySelector("#fixed-aqua").classList.add("sticky");
  else
    document.querySelector("#fixed-aqua").classList.remove("sticky");  
}