Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
451 / 417 / 115
Регистрация: 15.02.2012
Сообщений: 1,847
1

отслеживать скрол

13.02.2014, 17:19. Показов 2547. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Javascript
1
2
3
4
5
6
7
var pag_e = 1;
var block_e = false;
$(window).scroll(function () {
    if($(window).height() + $(window).scrollTop() >= $(document).height() - 600 && !block_e) {
        block_e = true;
        pag_e = pag_e + 1;
                alert(pag_e);
вот никак не могу понять как заблокировать скрипт - если прокручивать потихоньку, то все работает, а если колесиком мышки, то получаю сразу pag_e=2, pag_e=3. иногда 2 одинаковых значения и у меня выскакивает либо 2 одинаковых сообщения либо 2 сразу

Добавлено через 21 час 29 минут
никто не может подсказать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2014, 17:19
Ответы с готовыми решениями:

Скрол
Быть может есть готовая библиотека для скрола. К примеру стандартный прячем, через дополнительную...

Скрол как ВКонтакте
Добрый день программисты, как сделать чтобы когда появлялся вертикальный скрол, сайт не сдигался на...

Не правельно работает скрол
Привет, есть сайт и в низу есть стрелка при клике на нее должно вверх подниматься к хедеру, вроде...

Скрол страницы, выполнение условия
У меня имеется код который добавляет класс "fixed" блоку scroll когда расстояние от верха страницы...

5
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
13.02.2014, 17:36 2
Цитата Сообщение от tgarl Посмотреть сообщение
никто не может подсказать?
Подсказать, что шаг колеса мышки отличается от того, когда юзер тянет за скроллбар? Или подсказать, что такой шаг у разных устройств, может значительно отличаться? Или предположить, что высота каждого блока настолько мала, что и одного движения колеса хватает, чтоб проскочить сразу несколько блоков? Еще вчера прошел мимо, потому как не охота быть К.О. Можно было бы что-то подумать, что-то предположить, найти правильный бубен, с которым плясать, но для этого, как минимум, хорошо бы выложить пример в песочницу. Для вас, как далеко не новичка на форуме, я думал, что это должно быть очевидно.
0
451 / 417 / 115
Регистрация: 15.02.2012
Сообщений: 1,847
13.02.2014, 18:57  [ТС] 3
если вы понимаете мою ошибку, то на мой взгляд того, что я выложил достаточно. Дальше было всего-лишь отобразить div с id=asd+pag_e Но если вам нужен весь код не вопрос, правда я уже его переделал под постраничку(проблема осталась) вот он http://jsfiddle.net/Dgtgt/
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$(document).ready(function () {
    var pag_e_f = $("#nav_resulsi").val();
    var pag_e = 1;
    var block_e = false;
    var stranno = $("#podgruzka_e").html();
    var ids_e = null;
$(window).scroll(function () {
    if($(window).height() + $(window).scrollTop() >= $(document).height() - 500 && !block_e) {
        block_e = true;
        if(ids_e == null){
            scrollPosition=$(window).scrollTop();
            ids_e = setTimeout(function(){
                pag_e = pag_e + 1;
                if ( pag_e <= pag_e_f){
                    $("#prelod").css('display','block');
                        //alert(pag_e+" - "+pag_e_f); сюда приходят 2значения вместо 1
                        $("#podgruzka_e").load('/ind.php #test li', {PAGEN_1: pag_e}); 
                        setTimeout(function(){
                            stranno = $("#podgruzka_e").html();
                            $('#test').append(stranno);
                            $("#prelod").css('display','none');
                            if (scrollPosition !== undefined && scrollPosition !== null) {
                                $(window).scrollTop(scrollPosition);
                            }
                        },2000);
                        $("#podgruzka_e").html();
                        if(ids_e !== null){ids_e = null;}
                        block_e = false;
                }
            },500);
        }
    }
});
 
});
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ul id="test">
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
    <li>блок</li>
</ul>
<div id="prelod" style="display:none; text-align:center;width:99%;"><img src="/images/486.GIF"></div>
<input type="hidden" value="5" id="nav_resulsi">
<div id="podgruzka_e" style="display:none;"></div>
 Комментарий модератора 
Код должен присутствовать в тексте сообщения. Песочницы — это лишь бонус для демонстрации.
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
13.02.2014, 21:34 4
Мде... Видать это страшная тайна, раз вы не хотите ввести в курс дела. Глядя на ваш код, я могу только догадываться, что у вас там происходит и какой результат должен быть в итоге. Сделал вам абстрактный пример и поясню, что там происходит. Пригодиться - плиззз, а нет - то пардоньте.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var flag = false,
    block = 1,
    cnt = $('#grid li').length,
    output = $('#output'),
    mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel";
 
output.load('/gh/gist/response.html/8977252 #b1');
$(document).on(mousewheelevt+'.my_wheel', function(e){
    e.preventDefault();
    console.log(flag);
    if(flag) return false;
    var evt = window.event || e;     
    evt = evt.originalEvent ? evt.originalEvent : evt;
    var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta; 
    if(delta > 0) {
        if(block <= 1) return false;
        output.load('/gh/gist/response.html/8977252 #b' + (--block));
    }
    else{
        if(block >= cnt) return false;
        output.load('/gh/gist/response.html/8977252 #b' + (++block));
    }
    flag = true;
    $('html,body').finish().animate({
        scrollTop : $('li').eq(block).offset().top
    }, 1000, function(){
        flag = false;
    });
});
// если надо отменить запрет скроллинга мышью
//$(document).off('.my_wheel');
Задачу придумал следующую: необходимо, чтоб при прокрутке мыши, попадать четко на очередной блок, при этом должен подгружаться соответствующий блок внешнего документа (его можно лицезреть тут).
Решение: запрещаем юзверю прокрутку мышкой, отлавливаем направление, куда он планировал скроллить и с помощью метода .animate() подводим к следующему (вверх/вниз) от текущего блоку. Может чего лишнего забыл убрать из кода, но это уже не суть важно.

Добавлено через 5 минут
P.S. К чему это я?.. Иногда лучше сделать работу за пользователя, чем ждать, что он может повести себя, как обезьяна с гранатой.
1
451 / 417 / 115
Регистрация: 15.02.2012
Сообщений: 1,847
14.02.2014, 10:51  [ТС] 5
Мде... Видать это страшная тайна, раз вы не хотите ввести в курс дела. Глядя на ваш код, я могу только догадываться, что у вас там происходит и какой результат должен быть в итоге.
никакой тайны нет. я привел код который использую. содержимое блоков <li> генерируется на основе request параметров. id=test не меняется, на странице ничего не меняется, только когда прокручиваем до грубо говоря 3/4 документа
Javascript
1
$(document).height() - 500
мы отправляемся на эту же страницу, но с параметрами
Javascript
1
$("#podgruzka_e").load('/ind.php #test li', {PAGEN_1: pag_e});
и забираем содержимое сгенерированного id=test и подставляем в текущий в конец - по сути это постраничная навигация через скрол. но проблема в том что когда я скролю(и тут не важно через мышку или ползунок...) скрол срабатывает 2 раза и я получаю либо две вторых, либо две третьих страницы
Javascript
1
2
if($(window).height() + $(window).scrollTop() >= $(document).height() - 500 && !block_e) {
        block_e = true;
этот блок в моем понятии должен сработать 1 раз, а второй нет потому как block_e уже существует, но на практике получается что нет.
как еще объяснить то, что мне нужно

За приведенный код большое спасибо, есть чему поучиться, но вот ирония ваша мне увы не понятна
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
14.02.2014, 11:13 6
Цитата Сообщение от tgarl Посмотреть сообщение
ирония ваша мне увы не понятна
Не понятна потому, что это вовсе не ирония, а скорее плохо скрытое раздражение. Но оставим это, а по поводу вашей задачи, то скролл будет срабатывать постоянно, а вот остановите вы выполнение действий, связанных с этим событием или разрешите выполнение - зависит от вас. То есть, доскроллили до 2/3 страницы > выполнили действие > поставили флаг > скроллим дальше > проверяем по флагу, делали мы что-то или еще нет > если да - return false, если нет - выполняем и ставим флаг.
0
14.02.2014, 11:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2014, 11:13
Помогаю со студенческими работами здесь

Скрол исчезает раньше анимации
pl.animate({height: ht}, 100, function() { pl.css({overflow:'hidden'}); }); Не понимаю,...

Как определить что скрол на дне?
$('.lg',0).scroll(function() { var scroll = $(this).scrollTop()+ $(this).height();; ...

Как убрать скрол при обновлении div
И так есть проблемма допустим есть у меня div в нем таблица Предположим в ней 10 строк...

Отслеживать события imagemapster
Всем привет! Первый раз тут-) Очень нужна помощь!!! Задача стоит следующая. Сделал на сайте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru