Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Увеличение числа в input с помощью колеса мыши
 
 автор: amigo63   (19.03.2009 в 13:12)   письмо автору
 
 

Всем доброго дня. Нужно осуществить вышеописанный фокус.
Есть поле ввода, где устанавливаются часы в формате 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. Как вариант - нажать левую клавишу и тянуть вверх/вниз. Если вышеописанное нереализуемо

  Ответить  
 
 автор: PAT   (19.03.2009 в 15:08)   письмо автору
 
   для: 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. Как решать эту задачу в иных браузерах - честно говоря, не знаю.

  Ответить  
 
 автор: amigo63   (19.03.2009 в 15:48)   письмо автору
 
   для: PAT   (19.03.2009 в 15:08)
 

Спасибо Вам :) С дополнением для диапазонов и формата проблем не возникло.
В ИЕ работает отлично, но... Очень нужен кроссбраузерный вариант.
Вообще событие onmousewheel=" " - это только для ИЕ или его все браузеры понимают?

  Ответить  
 
 автор: PAT   (19.03.2009 в 15:52)   письмо автору
 
   для: amigo63   (19.03.2009 в 15:48)
 

Повторюсь - "Как решать эту задачу в иных браузерах - честно говоря, не знаю."

  Ответить  
 
 автор: amigo63   (19.03.2009 в 18:51)   письмо автору
 
   для: PAT   (19.03.2009 в 15:52)
 

Проверил. onmousewheel=" " понимает опера, но не понимает мозилла.

  Ответить  
 
 автор: sl1p   (19.03.2009 в 23:31)   письмо автору
 
   для: amigo63   (19.03.2009 в 18:51)
 

можно как вариант, при фокусе в текстареа, вешать событие на страницу..
window.addEventListener('DOMMouseScroll', myFunc, false);

  Ответить  
 
 автор: amigo63   (20.03.2009 в 00:09)   письмо автору
1.3 Кб
 
   для: sl1p   (19.03.2009 в 23:31)
 

Да, в мозилле такой вариант работает. Даже лучше его сразу повесить на текстареа. А с оперой у меня по-прежнему пока пролет... По документации, она понимает element.onmousewheel = myFunc; а у меня почему -то не понимает)

P.S. Осмелился приложить код, работает в FF и IE. Может, у кого будет время глянуть...

  Ответить  
 
 автор: amigo63   (20.03.2009 в 00:20)   письмо автору
 
   для: sl1p   (19.03.2009 в 23:31)
 

-

  Ответить  
 
 автор: amigo63   (20.03.2009 в 10:18)   письмо автору
1.3 Кб
 
   для: sl1p   (19.03.2009 в 23:31)
 

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

  Ответить  
 
 автор: PAT   (20.03.2009 в 12:09)   письмо автору
 
   для: amigo63   (20.03.2009 в 10:18)
 

Интересно, но почему-то у меня в MSIE этот скрипт клинит на первом (часовом) инпуте при переходе с 08 на 09 (и наоборот с 09 на 08) - ожидаемые 09 или 08 не появляются, а вместо них выбрасывает 00 (или 23).

  Ответить  
 
 автор: amigo63   (20.03.2009 в 13:18)   письмо автору
 
   для: PAT   (20.03.2009 в 12:09)
 

Блин... Спасибо, что подметили. У меня то же самое :( попытаюсь разобраться в чем дело.

З.ы. В FF то же самое. Виной всему оказывается вот эта часть:

    if(change<10)
    change="0"+change;

  Ответить  
 
 автор: amigo63   (20.03.2009 в 13:58)   письмо автору
 
   для: PAT   (20.03.2009 в 12:09)
 

Видимо надо change преобразовать в строку, только я пока не знаю как))

Преобразование строки не помогло. Поиск не дал результатов,
if(change<10)
change="0"+String(change);
this.value = change;

по-прежнему вызывает сброс цикла к 01 после 08 вверх и к максимальному значению после 09 вниз.
Сходное условие в другом коде проблем не вызывает.
Форумчане, снова надеюсь на вашу помощь!

  Ответить  
 
 автор: amigo63   (21.03.2009 в 15:21)   письмо автору
1.4 Кб
 
   для: PAT   (19.03.2009 в 15:08)
 

Ну вроде решил проблему. Нужно было просто, тобы скрипт вместо 08 и 09 получал 8 и 9. Работает)

  Ответить  
 
 автор: mikha   (22.03.2009 в 23:54)   письмо автору
 
   для: amigo63   (21.03.2009 в 15:21)
 

Так как сделали? Я ради интереса прикинул, обрезать первый символ если 0.
Но должно быть более изящное решение.
ЗЫ. Прошареным товарисчам, PATу пиво)))), и прочим.. Как сделать "красиво"?
UP. А ещё лучше если кто нибуть объяснит почему так происходит)))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования