Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Отслеживание останова во время события onmousemove (https://javascript.ru/forum/dom-window/36460-otslezhivanie-ostanova-vo-vremya-sobytiya-onmousemove.html)

demon_666_902 15.03.2013 17:24

Отслеживание останова во время события onmousemove
 
В общем имеется обработчик события скролла на перемещение его мышью:
// Обработчик нажатия на скролл
        $(scroll.id + ' .scroll_polz_v').mousedown(function(e){
            e.preventDefault();
            var start = e.pageY - $(this).offset().top;
            var start_top = $(this).offset().top - $(this).position().top;
            // Обработчик перемещения
            $(document).mousemove(function(e){
                scroll.mousemove = true;
                var top = e.pageY - start_top - start;
                var top_gr = $(scroll.id + ' .scroll_body_v').height()- $(scroll.id + ' .scroll_polz_v').height() - 11;
                if (top >= 0 && top <= top_gr) {
                    if ((top + 10) >= top_gr){
                        $(scroll.id + ' .scroll_polz_v').css('top', top);
                        sp = scroll.cell_count * scroll.row_count - 10;
                        scroll.position = sp;
                    } else{
                        $(scroll.id + ' .scroll_polz_v').css('top', top);
                        var sp = Math.floor(top/((scroll.height-scroll.polzh)/scroll.cell_count)) * scroll.row_count;
                        scroll.position = sp;
                    }
                }
            });
        });


Так вот предложили реализовать подсказку:
Цитирую заказчика:
Можно ли так сделать чтобы хинт при наведении мыши на указатель
и удержании кнопки мыши показывал время целевого перемещения?
Чтобы юзер перемещая мышью указатель наглядно видел куда (на какое
время) он его устанавливает.

время - это то, что будет показываться в окне, которое должно появляться
pop-up который всплывает при одновременной сработке 2-х событий

кнопка мыши удерживается над указателем
указатель статичен (т.е. во время перетаскивания не нужно показывать)
т.о. pop-up будет только при начале движения (с момента нажатия
кнопки, но до начала движения, если быть точнее)
и в конечной (или промежуточной) точке, пока пользователь удерживает
кнопку мыши
кнопку мыши отпустил - pop-up исчез, окно матрицы начало перестраиваться

Вот я и думаю, как можно сделать это. Можете подсказать. Ну хотя бы сказать возможно ли это и за счет чего? Как узнать, что пользователь перестал перетаскивать мышь?

danik.js 15.03.2013 20:02

У вас при каждом событии mousedown дублируется обработчик document.onmousemove. В конце концов их будет под сотню и все начнет тормозить :)

Цитата:

Сообщение от demon_666_902
Как узнать, что пользователь перестал перетаскивать мышь?

Перестанут генерироваться события mousemove. Если пользователь отпустит кнопку - произойдет событие mouseup

demon_666_902 19.03.2013 15:29

e.preventDefault();

Разве не сбрасываются все предыдущие обработчики этой функцией?

demon_666_902 19.03.2013 15:34

Вложений: 1
Ну в общем конечный вариант объекта скролла выглядит следующим образом (во вложениях)

rgl 19.03.2013 16:06

По событию
1. Убивать старый таймаут (если есть)
2. Запускать новый таймаут.
По срабатыванию таймаута делать что надо. Пока мышка двигается, таймаут не наступит, т.к. будет постоянно перезапускаться.
Что-то похожее я делал пару лет назад:
Цитата:

Сообщение от rgl (Сообщение 94342)
При наведении мышки на участок также подсвечивается и номер, и строка таблицы, а при необходимости таблица автоматически прокручивается, но не сразу а с небольшой задержкой. (Задержка сделана для того, чтобы избежать ненужных прокручиваний пока пользователь ведет мышку к интересующему участку и проводит ее через другие участки). Т.е. прокручивание происходит после того, как мышка на участке остановилась (точнее, находится на участке дольше чем полсекунды).

http://javascript.ru/forum/project/1...jj-skript.html

rgl 20.03.2013 10:51

Вот, нарисовал примерчик:
<html>
<head>
  <script type="text/javascript">
    var to = null; // не знаю нужно ли, но для порядка пусть будет
  </script>
</head>
<body>
  Подвигайте мышкой на красном прямоугольнике, а потом остановите
  <div style="width:160px;height:90px;background-color:red"
       onmousemove="if(to) clearTimeout(to); to = setTimeout( 'alert(\'мышка остановилась\')', 500 );"
       onmouseout="if(to) clearTimeout(to); to = null">
    <!-- пусто -->
  <div>
</body>
</html>

demon_666_902 22.03.2013 15:46

Вложений: 2
Цитата:

Сообщение от rgl (Сообщение 241648)
Вот, нарисовал примерчик:
<html>
<head>
  <script type="text/javascript">
    var to = null; // не знаю нужно ли, но для порядка пусть будет
  </script>
</head>
<body>
  Подвигайте мышкой на красном прямоугольнике, а потом остановите
  <div style="width:160px;height:90px;background-color:red"
       onmousemove="if(to) clearTimeout(to); to = setTimeout( 'alert(\'мышка остановилась\')', 500 );"
       onmouseout="if(to) clearTimeout(to); to = null">
    <!-- пусто -->
  <div>
</body>
</html>

Спасибо за подсказку, правда я уже именно так и сделал, кому интересно прикрепляю скрипт PopUp Окна


Часовой пояс GMT +3, время: 01:29.