|
27.12.2017, 19:49
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от JohnJohn
|
событие срабатывает на каждый индекс массива
|
только один элемент может быть всех ближе к верху окна, только предыдущему этого элемента (или следующему) будет скролл. в чём проблема?
|
|
27.12.2017, 20:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от JohnJohn
|
var a = $("div").index(b[0]);
|
b[0] это всегда разный элемент, тот который ближе к верху, это происходит в результате сортировки.
если и куда-то можно втиснуть цикл, то это заменить сортировку циклом. так будет быстрее даже за счёт break.
|
|
27.12.2017, 20:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
JohnJohn,
Задача №1. (по желанию)
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
*{
margin: 0;
padding: 0;
}
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>
window.addEventListener("DOMContentLoaded", function() {
var b = document.querySelectorAll("div");
document.addEventListener("keydown", function(e) {
for (var i=0; i < b.length; i++) {
//ваша задача остановить цикл на элементе который всех ближе к верху окна
}
alert(i + 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>
|
|
28.12.2017, 02:29
|
Аспирант
|
|
Регистрация: 04.06.2017
Сообщений: 46
|
|
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
*{
margin: 0;
padding: 0;
}
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>
window.addEventListener("DOMContentLoaded", function() {
var b = document.querySelectorAll("div");
document.addEventListener("keydown", function(e) {
for (var i=0; i < b.length; i++) {
if (window.pageYOffset < (b[i].getBoundingClientRect().top + window.pageYOffset)) break;
}
alert(i);
});
});
</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>
|
|
28.12.2017, 02:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
JohnJohn,
|
|
28.12.2017, 02:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
JohnJohn,
только уберите лишнее из строки 25
|
|
28.12.2017, 03:06
|
Аспирант
|
|
Регистрация: 04.06.2017
Сообщений: 46
|
|
не могу понять, что лишнее) break на 26 перенести?)
Последний раз редактировалось JohnJohn, 28.12.2017 в 03:08.
|
|
28.12.2017, 03:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
JohnJohn,
то что одинаково в сравнении, можно сократить, вычитанием из обоих частей сравнения.
|
|
28.12.2017, 03:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
JohnJohn,
5 < y + 5 == 0 < y
|
|
28.12.2017, 03:40
|
Аспирант
|
|
Регистрация: 04.06.2017
Сообщений: 46
|
|
рони,
понял) ну как все напишу, там обязательно уберу, а так пусть будет, что бы людей не путать) спасибо
|
|
|
|