Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.03.2013, 17:24
Аватар для demon_666_902
Интересующийся
Отправить личное сообщение для demon_666_902 Посмотреть профиль Найти все сообщения от demon_666_902
 
Регистрация: 15.03.2013
Сообщений: 11

Отслеживание останова во время события 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 исчез, окно матрицы начало перестраиваться

Вот я и думаю, как можно сделать это. Можете подсказать. Ну хотя бы сказать возможно ли это и за счет чего? Как узнать, что пользователь перестал перетаскивать мышь?
Ответить с цитированием
  #2 (permalink)  
Старый 15.03.2013, 20:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Сообщение от demon_666_902
Как узнать, что пользователь перестал перетаскивать мышь?
Перестанут генерироваться события mousemove. Если пользователь отпустит кнопку - произойдет событие mouseup
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2013, 15:29
Аватар для demon_666_902
Интересующийся
Отправить личное сообщение для demon_666_902 Посмотреть профиль Найти все сообщения от demon_666_902
 
Регистрация: 15.03.2013
Сообщений: 11

e.preventDefault();

Разве не сбрасываются все предыдущие обработчики этой функцией?
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2013, 15:34
Аватар для demon_666_902
Интересующийся
Отправить личное сообщение для demon_666_902 Посмотреть профиль Найти все сообщения от demon_666_902
 
Регистрация: 15.03.2013
Сообщений: 11

Ну в общем конечный вариант объекта скролла выглядит следующим образом (во вложениях)
Вложения:
Тип файла: zip scroll.js.zip (3.4 Кб, 1 просмотров)
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2013, 16:06
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

По событию
1. Убивать старый таймаут (если есть)
2. Запускать новый таймаут.
По срабатыванию таймаута делать что надо. Пока мышка двигается, таймаут не наступит, т.к. будет постоянно перезапускаться.
Что-то похожее я делал пару лет назад:
Сообщение от rgl Посмотреть сообщение
При наведении мышки на участок также подсвечивается и номер, и строка таблицы, а при необходимости таблица автоматически прокручивается, но не сразу а с небольшой задержкой. (Задержка сделана для того, чтобы избежать ненужных прокручиваний пока пользователь ведет мышку к интересующему участку и проводит ее через другие участки). Т.е. прокручивание происходит после того, как мышка на участке остановилась (точнее, находится на участке дольше чем полсекунды).
Интерактивная карта (оцените простенький скрипт)
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2013, 10:51
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Вот, нарисовал примерчик:
<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>

Последний раз редактировалось rgl, 20.03.2013 в 10:53.
Ответить с цитированием
  #7 (permalink)  
Старый 22.03.2013, 15:46
Аватар для demon_666_902
Интересующийся
Отправить личное сообщение для demon_666_902 Посмотреть профиль Найти все сообщения от demon_666_902
 
Регистрация: 15.03.2013
Сообщений: 11

Сообщение от rgl Посмотреть сообщение
Вот, нарисовал примерчик:
<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 Окна
Вложения:
Тип файла: zip scrollPopup.zip (1.0 Кб, 1 просмотров)
Тип файла: zip scroll.js.zip (3.2 Кб, 1 просмотров)

Последний раз редактировалось demon_666_902, 22.03.2013 в 15:47. Причина: Добавление вложения
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена действия события во время выполнения анимации gunsoy Общие вопросы Javascript 2 12.06.2012 13:27
Отслеживание события изменения belkir Events/DOM/Window 1 04.08.2011 03:42