|
|
|
| Всем доброго дня. Нужно осуществить вышеописанный фокус.
Есть поле ввода, где устанавливаются часы в формате HH:
<input type="text" style="width:70px" value="00" name="h">
можно ли сделать так, чтобы при наведеии курсора и прокрутке колеса вверх/вниз
число увеличивалось/уменьшалось? Смотрел инфу по обработчикам событий колеса,
но вся она касается скроллинга.
Например, вот здесь:
function wheel(event)
{
// Переменная, в которой будем хранить сдвиг
var wheelDelta = 0;
// Шаг меню при прокрутке
var step = 300;
if (!event)
{
event = window.event;
}
if (event.wheelDelta)
{
// В IE и Opera при сдвиге колеса на один шаг event.wheelDelta принимает значение 120
// Значения сдвига в этих двух браузерах совпадают по знаку.
wheelDelta = event.wheelDelta/120;
}
else if (event.detail)
{
// В Mozilla, значение wheelDelta отличается по знаку от значения в IE.
// Сдвиг колеса на один шаг соответствует значению 3 параметра event.detail
wheelDelta = -event.detail/3;
}
// При скроллинге вверх wheelDelta > 0
// При скролинге вниз - wheelDelta < 0
if (wheelDelta)
{
var currentPosition = parseInt(scroller.style.left);
var newPosition = wheeldelta*step + currentPosition;
setPosition(newPosition);
}
// Убиваем событие (чтобы страница не скроллилась)
if (event.preventDefault)
{
event.preventDefault();
}
event.returnValue = false;
blockEvent(event);
}
|
понял только, что само действие, "повешенное" на колесо, выполняется
там, где выделил жирным, и нужно вписать что-то вроде
document.forms[0].h.value=wheeldelta*step+parseInt(document.forms[0].h.value). Но не могу понять, что за event нужно передать в функцию? Вместо него лучше бы передать как раз document.forms[0].h...
P.S. Как вариант - нажать левую клавишу и тянуть вверх/вниз. Если вышеописанное нереализуемо | |
|
|
|
|
|
|
|
для: amigo63
(19.03.2009 в 13:12)
| | Что-то вы намудрили.
В MSIE всё решается очень просто:
<input id="txt" value="" onmousewheel="MyWheel ()">
<script>
function MyWheel ()
{
if (event.wheelDelta >= 120) f (1);
else if (event.wheelDelta <= -120) f (0);
return false;
function f (x)
{
with (document.getElementById ('txt'))
{
var y = (value * 1) ? (value * 1) : 0;
value = y + ((x) ? 1 : -1);
}
}
}
</script>
| PS. В примере поле ввода изначально не имеет значения и поэтому приравнивается нулю. Но, разумеется изначальное значение ввести можно - любое числовое.
PS2. Вас, как я понял, интересует именно представление в диапазонах 00...59 (для минут-секунд) и 00...23 (для часов). Дополнить код этим делом - просто.
Если не справитесь - свистните, помогу.
PS3. Как решать эту задачу в иных браузерах - честно говоря, не знаю. | |
|
|
|
|
|
|
|
для: PAT
(19.03.2009 в 15:08)
| | Спасибо Вам :) С дополнением для диапазонов и формата проблем не возникло.
В ИЕ работает отлично, но... Очень нужен кроссбраузерный вариант.
Вообще событие onmousewheel=" " - это только для ИЕ или его все браузеры понимают? | |
|
|
|
|
|
|
|
для: amigo63
(19.03.2009 в 15:48)
| | Повторюсь - "Как решать эту задачу в иных браузерах - честно говоря, не знаю." | |
|
|
|
|
|
|
|
для: PAT
(19.03.2009 в 15:52)
| | Проверил. onmousewheel=" " понимает опера, но не понимает мозилла. | |
|
|
|
|
|
|
|
для: amigo63
(19.03.2009 в 18:51)
| | можно как вариант, при фокусе в текстареа, вешать событие на страницу..
window.addEventListener('DOMMouseScroll', myFunc, false); | |
|
|
|
|
 1.3 Кб |
|
|
для: sl1p
(19.03.2009 в 23:31)
| | Да, в мозилле такой вариант работает. Даже лучше его сразу повесить на текстареа. А с оперой у меня по-прежнему пока пролет... По документации, она понимает element.onmousewheel = myFunc; а у меня почему -то не понимает)
P.S. Осмелился приложить код, работает в FF и IE. Может, у кого будет время глянуть... | |
|
|
|
|
|
|
|
для: sl1p
(19.03.2009 в 23:31)
| | - | |
|
|
|
|
 1.3 Кб |
|
|
для: sl1p
(19.03.2009 в 23:31)
| | Прилагаю идеально отлаженный установщик времени. Спасибо всем, кто принял участие в топике | |
|
|
|
|
|
|
|
для: amigo63
(20.03.2009 в 10:18)
| | Интересно, но почему-то у меня в MSIE этот скрипт клинит на первом (часовом) инпуте при переходе с 08 на 09 (и наоборот с 09 на 08) - ожидаемые 09 или 08 не появляются, а вместо них выбрасывает 00 (или 23). | |
|
|
|
|
|
|
|
для: PAT
(20.03.2009 в 12:09)
| | Блин... Спасибо, что подметили. У меня то же самое :( попытаюсь разобраться в чем дело.
З.ы. В FF то же самое. Виной всему оказывается вот эта часть:
if(change<10)
change="0"+change;
|
| |
|
|
|
|
|
|
|
для: PAT
(20.03.2009 в 12:09)
| | Видимо надо change преобразовать в строку, только я пока не знаю как))
Преобразование строки не помогло. Поиск не дал результатов,
if(change<10)
change="0"+String(change);
this.value = change;
по-прежнему вызывает сброс цикла к 01 после 08 вверх и к максимальному значению после 09 вниз.
Сходное условие в другом коде проблем не вызывает.
Форумчане, снова надеюсь на вашу помощь! | |
|
|
|
|
 1.4 Кб |
|
|
для: PAT
(19.03.2009 в 15:08)
| | Ну вроде решил проблему. Нужно было просто, тобы скрипт вместо 08 и 09 получал 8 и 9. Работает) | |
|
|
|
|
|
|
|
для: amigo63
(21.03.2009 в 15:21)
| | Так как сделали? Я ради интереса прикинул, обрезать первый символ если 0.
Но должно быть более изящное решение.
ЗЫ. Прошареным товарисчам, PATу пиво)))), и прочим.. Как сделать "красиво"?
UP. А ещё лучше если кто нибуть объяснит почему так происходит))) | |
|
|
|