Определить ближайший верхний элемент в окне
Здравствуйте, есть html блоки
<div id="1" style="height:700px;border:1px solid"></div> <div id="2" style="height:500px;border:1px solid"></div> <div id="3" style="height:300px;border:1px solid"></div> <div id="4" style="height:600px;border:1px solid"></div> Как можно определить при прокрутке окна активный блок, т.е самый верхний видимый блок в окне? Вообще мне это нужно для скроллинга по блокам scrollTo с помощью клавиатуры стрелки вверх и вниз, т.е как бы я не перемещался на странице вверх или вниз, нажав стрелочки я должен перемещаться к следующему или предыдущему блоку... Может быть для этого нет необходимости определять видимый блок на странице? |
Цитата:
|
Цитата:
|
Тогда возможно тебе поможет document.elementFromPoint(x, y) и Element.prototype.getBoundingClientRect()
|
Вот кое что слепил, работает, но сколько же итераций в холостую происходит это ужас, может кто поможет?
$(document).ready(function() { var result; $(document).scroll(function() { result = scrolList('div'); }); $(document).keydown(function(eventObject) { if(eventObject.which == 87) { //w $('html,body').scrollTo(result.id, $(result).prev()) } else if(eventObject.which == 83) { //s $('html,body').scrollTo(result.id, $(result).next()); } }); }); function scrolList(s){ var scrollTop = $(window).scrollTop(); var currentEls = $(s); var result; currentEls.each(function(){ var offset = $(this).offset(); $('#resl').prepend((scrollTop) +'>'+ (offset.top )+'<br>'); if((scrollTop+70) > (offset.top)) { result = $(this); } }); return $(result); } |
Цитата:
|
Zhazhah,:write:
Вариант ... скролл к ближайшему s - вниз, w - вверх - кликнуть по документу 1 раз в начале <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> div{width:100%} #d1{background:#00F;height:700px;border:1px solid} #d2{background:#FF0;height:500px;border:1px solid} #d3{background:#F0F;height:300px;border:1px solid} #d4{background:#F00;height:600px;border:1px solid} </style> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script> $(document).ready(function () { var b = []; $("div").each(function (c, d) { b[c] = [$(d).offset().top, $(d).height()] }); $(document) .keyup(function (c) { if (87 == c.which || 83 == c.which) { for (var d = $(document).scrollTop(), a = 0; a < b.length && !(b[a][0] + b[a][1] > d); a++); a = 83 == c.which ? ++a : --a; 0 > a && (a = 0); a >= b.length && (a = b.length - 1); $("body,html").animate({scrollTop: b[a][0]}, 400); return !1 } }) }); </script> </head> <body> <div id="d1" >1</div> <div id="d2" >2</div> <div id="d3" >3</div> <div id="d4" >4</div> </body> </html> |
Шиикарно:thanks:
Единственный минус, когда картинки есть в блоке без указанной высоты, размер не правильно вычисляется |
Часовой пояс GMT +3, время: 08:29. |