Отслеживание останова во время события 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 исчез, окно матрицы начало перестраиваться Вот я и думаю, как можно сделать это. Можете подсказать. Ну хотя бы сказать возможно ли это и за счет чего? Как узнать, что пользователь перестал перетаскивать мышь? |
У вас при каждом событии mousedown дублируется обработчик document.onmousemove. В конце концов их будет под сотню и все начнет тормозить :)
Цитата:
|
e.preventDefault();
Разве не сбрасываются все предыдущие обработчики этой функцией? |
Вложений: 1
Ну в общем конечный вариант объекта скролла выглядит следующим образом (во вложениях)
|
По событию
1. Убивать старый таймаут (если есть) 2. Запускать новый таймаут. По срабатыванию таймаута делать что надо. Пока мышка двигается, таймаут не наступит, т.к. будет постоянно перезапускаться. Что-то похожее я делал пару лет назад: Цитата:
|
Вот, нарисовал примерчик:
<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>
|
Вложений: 2
Цитата:
|
| Часовой пояс GMT +3, время: 00:19. |