簡體   English   中英

僅滾動一個div,一個div滾動一個div

[英]Scroll to div by div with only one scroll, of divs that already scroll over each other

我使div彼此滾動,而不使它們從示例(此處為jsfiddle )向上滾動到屏幕之外

 (function($){ /* Store the original positions */ var d1 = $('.one'); var d1orgtop = d1.position().top; var d2 = $('.two'); var d2orgtop = d2.position().top; var d3 = $('.three'); var d3orgtop = d3.position().top; var d4 = $('.four'); var d4orgtop = d4.position().top; /* respond to the scroll event */ $(window).scroll(function(){ /* get the current scroll position */ var st = $(window).scrollTop(); /* change classes based on section positions */ if (st >= d1orgtop) { d1.addClass('latched'); } else { d1.removeClass('latched'); } if (st >= d2orgtop) { d2.addClass('latched'); } else { d2.removeClass('latched'); } if (st >= d3orgtop) { d3.addClass('latched'); } else { d3.removeClass('latched'); } if (st >= d4orgtop) { d4.addClass('latched'); } else { d4.removeClass('latched'); } }); })(window.jQuery); 
 .container { background: black; position: relative; } .spacer { width: 0; height: 600px; float: left; clear: both; } .one { background:red; width: 100%; height: 600px; position: relative; float: left; } .two { background: blue; width: 100%; height: 600px; position: relative; float: left; } .three { background: green; width: 100%; height: 600px; position: relative; float: left; } .four { background: yellow; width: 100%; height: 600px; position: relative; float: left; } .latched { position: fixed; top: 0; left: 8px; right: 8px; width: auto; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- 1. Items that are not in fixed position * latched * scroll normally --> <!-- 2. Items that go above the scroll position are given .latched --> <!-- 3. If they scroll down again, they lose .latched --> <!-- 4. div.spacer included to pad out space when content sections become latched --> <div class="spacer"></div> <div class="one"> <h2>ONE</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div class="spacer"></div> <div class="two"> <h2>TWO</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div class="spacer"></div> <div class="three"> <h2>THREE</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div class="spacer"></div> <div class="four"> <h2>FOUR</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div style="clear: both"></div> <div style="height: 1000px"></div> 

現在我只想滾動一次即可從div滾動到div(從一個部分滾動到另一個部分)-參見jsfiddle示例。 同時仍然保持一個div滾動到另一個div的動畫效果

您必須稍微修改一下設置。 我將您的div放入數組中,然后修改了您的代碼,以使其跟蹤滾動事件的目標div。 您還需要忽略在滾動到元素時生成的滾動事件。 此答案中的代碼在這方面有所幫助。

這是您更新的代碼(它也保持div固定效果):

 (function($) { var prevScroll = 0; //stores last successful scroll var scrollIdx = 0; //current index in your div array //array that contains the div object and original offset from the top to handle the animation var divs = [{ div: $('.one'), top: $('.one').position().top }, { div: $('.two'), top: $('.two').position().top }, { div: $('.three'), top: $('.three').position().top }, { div: $('.four'), top: $('.four').position().top }]; var scrollDestination = -1; //stores the target div's offset // handles div fixing as the scroll transitions from one div to the next function setLatch(st) { divs.forEach(function(divObj) { if (st >= divObj.top) { divObj.div.addClass('latched'); } else { divObj.div.removeClass('latched'); } }) } /* respond to the scroll event */ $(window).scroll(function(e) { /* get the current scroll position */ var st = $(window).scrollTop(); var scrollDir = 0; //reset the latch as the scroll occurs setLatch(st); // check the state of the scroll event if (scrollDestination == -1) { //we're done scrolling //noop } else if (st != scrollDestination) { //we're still scrolling, ignore return; } else if (st == scrollDestination) { //we're done, but ignore this final scroll event scrollDestination = -1; prevScroll = st; return; } //determine the direction of the scroll; if (st > prevScroll) { scrollDir = 1; } else { scrollDir = -1; } if (scrollIdx + scrollDir == divs.length || scrollIdx + scrollDir < 0) { //do nothing bu update the prevScroll so we can accurately //capture the direction the next time around prevScroll = st; return; } scrollIdx += scrollDir; //record the destination of the next div scrollDestination = divs[scrollIdx].top; $('html, body').animate({ scrollTop: divs[scrollIdx].top }, { duration: 1000 }); }); })(window.jQuery); 
 .container { background: black; position: relative; } .spacer { width: 0; height: 600px; float: left; clear: both; } .one { background: red; width: 100%; height: 600px; position: relative; float: left; } .two { background: blue; width: 100%; height: 600px; position: relative; float: left; } .three { background: green; width: 100%; height: 600px; position: relative; float: left; } .four { background: yellow; width: 100%; height: 600px; position: relative; float: left; } .latched { position: fixed; top: 0; left: 8px; right: 8px; width: auto; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- 1. Items that are not in fixed position * latched * scroll normally --> <!-- 2. Items that go above the scroll position are given .latched --> <!-- 3. If they scroll down again, they lose .latched --> <!-- 4. div.spacer included to pad out space when content sections become latched --> <div class="spacer"></div> <div class="one"> <h2>ONE</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div class="spacer"></div> <div class="two"> <h2>TWO</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div class="spacer"></div> <div class="three"> <h2>THREE</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div class="spacer"></div> <div class="four"> <h2>FOUR</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In nec lacus risus, eu sagittis felis. Praesent in feugiat elit. Pellentesque sem turpis, ornare et porttitor quis, placerat sit amet lacus. Fusce in purus sit amet sapien vestibulum volutpat ac at velit. Donec vel libero risus. Aliquam aliquet arcu vel justo molestie euismod. Suspendisse lorem massa, venenatis non congue a, commodo et nunc. Phasellus rhoncus, arcu a tristique adipiscing, mi dolor ullamcorper lacus, vel adipiscing ipsum mi ut augue. Pellentesque rhoncus dapibus tellus. Proin nec ante vel quam posuere mollis non vitae sem. Praesent hendrerit urna ac nisl consequat placerat. Ut placerat sollicitudin cursus. Curabitur orci magna, rhoncus et tempor non, volutpat nec erat. Sed ultrices ornare volutpat.</p> <p>Nunc imperdiet felis a purus feugiat vel euismod urna tristique. Maecenas sit amet felis tincidunt nulla tincidunt convallis nec eu purus. Donec auctor mauris non nisi rutrum euismod. Donec vehicula ipsum sit amet enim viverra sit amet commodo nulla mollis. Maecenas iaculis tincidunt quam et adipiscing. Vivamus eleifend nulla lobortis augue ultrices porta. Ut ut turpis dui, in vehicula nunc. In hac habitasse platea dictumst. Aliquam erat volutpat.</p> </div> <div style="clear: both"></div> <div style="height: 1000px"></div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM