Определить ближайший верхний элемент в окне
Здравствуйте, есть 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, время: 09:39. |