Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: JavaScript - что-то я затупил...подскажите, плз...  (Прочитано 14337 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Plush
Гость
« : 05-09-2006 16:10 » 

млин, давно не приходилось яву-скрипт юзать, стал тупить Жаль, а литература вся как на грех в другом офисе валяется...

тема такая:
есть область описанная <Div>'ом, есть две кнопки прокрутки в виде вставленных рисунков (вверх, вниз), цель при наведении мыши на рисунок крутить окно пока мышь находиться над рисунком, а при нажатии оной делать "полный верх" или "полный низ"

при помещении мыши над рисунком вызываю функцию-обработчик, "кручу", но!!! могу крутануть разок или крутить до упора, не работает что-то мозг как вставить в крутилке проверку на нахождении мыши над рисунком???

думал при он-мауз-аут "перебью" работу крутилки, ан нет, пока крутить не казончит хрена лысого останавливаецца =(
неужто единственный выход - координаты грызуна все время анализировать??? думаю должон быть более мудрый способ...

понимаю что вопрос первокласника, но я и не претендую на почетное звание "профи", просто весь мозг себе уже порушил...

скрипт писать мне не прошу, подскажите хоть в каком направлении копать??? плззззз...

заранее...
« Последнее редактирование: 14-12-2007 17:30 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 05-09-2006 16:25 » 

Plush, событие onmouseover при остановке курсора мыши перестает генериться. Соотв., логично onmouseover использовать для установки признака активации прокрутки (навел - началось), а onmouseout - для остановки прокрутки. Саму прокрутку доверить ф-ии на таймере.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Plush
Гость
« Ответ #2 : 05-09-2006 16:36 » 

прокрутку доверить ф-ии на таймере.

эт понятно, только туплю в вопросе что я в функции обработчике могу проверять, чтоб break втулить туда Не понял да, могу проверить прокручена вся область или еще есть куда крутить, а вот как проверить мышь над рисунком или ушла - ума не приложу...
если запускаю цикл крутилки, то он по факту получается, пока не отработает (не докрутит до конца) не хочет обрабатывать событие покидания мышью объекта...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 05-09-2006 16:43 » 

Код:
var run = 0;
var timer = 0;

function on_mouse_over()
{
    if (!run)
    {
        run = 1;
        timer = setInterval(on_timer, 100);
    }
}

function on_mouse_out()
{
    if (timer)
        clearInterval(timer);
    timer = 0;
    run = 0;
}

function on_timer()
{
    // do work...
}

function on_click()
{
    if (timer)
        clearInterval(timer);
    timer = 0;
    run = 0;
    // do work...
}
« Последнее редактирование: 05-09-2006 16:47 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Plush
Гость
« Ответ #4 : 05-09-2006 16:57 » 

спасибо, RXL, ведь чувствовал что туплю...
кстати, а можно в таком коде избавиться от "run" и анализировать значение "timer" Не понял

с оргомной благодарностью и в позе глыбочайшей признательности...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 05-09-2006 17:18 » 

Я бы не стал. run тут выполняет роль блокировки для on_mouse_over().
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Plush
Гость
« Ответ #6 : 05-09-2006 17:23 » 

run тут выполняет роль блокировки для on_mouse_over().

может я чего и не увидел, но в те моменты когда run == 0 также и timer == 0
или продолжаю тупить???
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 05-09-2006 17:25 » 

Plush, хм... да, так и есть. Просто я не рассматривал всех возможных вариантов в реальной программе и потому предпочитаю подстраховаться, чем потом ловить глюки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Plush
Гость
« Ответ #8 : 05-09-2006 17:32 » 

предпочитаю подстраховаться, чем потом ловить глюки.

вполне логично... это только я, наверное, обожаю парить себе мозг и избавляться от лишних переменных...

Гранд-гранд мерси...
Записан
Plush
Гость
« Ответ #9 : 05-09-2006 17:48 » 

подстраховаться, чем потом ловить глюки.

RXL, а я походу их и поймал, не работает "кака"...
лано, поеду домой - разбирацца, разберуся - сообчу, мерси огроменное
Записан
Plush
Гость
« Ответ #10 : 05-09-2006 20:06 » 

млин... жисть полна разочарований... понятно что надо было добраться до дома и поужинать чтоб с пол-пинка все заработало... скрипт заработал, IE вдохновился, но я не угомонился и решил сходить в "Оперу"  Меня одолевают смутные сомнения , вот тут-то меня и подстерегало величайшее разочарование  Здесь была моя ладья...
у моей "крутилки" с "оперой" сложилась несовместимость...  Быть такого не может другие обозреватели даж смотреть не стал...  Я шокирован!
у кого нить есть соображения на сей счет Не понял а может и еще у кого-нить в чем-нить работать не будет... А черт его знает...
код прилагаецца, живьём пощупать можно здесь: http://www.PromoPrint.ru

ХТМЛ-ный модуль:
Код:
...
<Img ID='ButtonUp' Src='image/go_blank.gif' Width='180' Height='18' onMouseOver='GoScroll( "Up" )' onMouseOut='GoScroll( "Stop" )' onClick='GoScroll( "Top" )'><Br>
<Div ID="ScrollPart" Align="Justify" Style="position:relative;top:0;left:0;width:470;height:650;overflow:hidden">

<!-- содержимое -->

</Div>
<Img ID='ButtonDown' Src='image/go_blank.gif' Width='180' Height='18' onMouseOver='GoScroll( "Down" )' onMouseOut='GoScroll( "Stop" )' onClick='GoScroll( "Bottom" )'>
...

Скриптовый модуль:
Код:
var timer = 0;

function GoScroll( cParameter ) {

if ( cParameter=="Stop" ) {
if ( timer != 0 )
clearInterval( timer );
timer = 0;
}

if ( cParameter=="Down" ) {
if ( ( timer==0 ) && ( ScrollPart.scrollTop!=( ScrollPart.scrollHeight - ScrollPart.offsetHeight ) ) )
timer = setInterval( GoDown, 10 );
}

if ( cParameter=="Up" ) {
if ( ( timer==0 ) && ( ScrollPart.scrollTop!=0 ) )
timer = setInterval( GoUp, 10 );
}

if ( cParameter=="Top"  && ( ScrollPart.scrollTop!=0 ) ) {
ScrollPart.scrollTop = 0;
ButtonUp.src = 'image/go_blank.gif';
}

if ( cParameter=="Bottom"  && ( ScrollPart.scrollTop!=( ScrollPart.scrollHeight - ScrollPart.offsetHeight ) ) ) {
ScrollPart.scrollTop = ( ScrollPart.scrollHeight - ScrollPart.offsetHeight );
ButtonDown.src = 'image/go_blank.gif';
}

// обработка изображения верхней кнопки
if ( ScrollPart.scrollTop != 0 ) {
ButtonUp.src = 'image/go_up.gif';
} else {
ButtonUp.src = 'image/go_blank.gif';
}
// обработка изображения нижней кнопки
if ( ScrollPart.scrollTop != ( ScrollPart.scrollHeight - ScrollPart.offsetHeight ) ) {
ButtonDown.src = 'image/go_down.gif';
} else {
ButtonDown.src = 'image/go_blank.gif';
}

}

function GoDown() {
ScrollPart.scrollTop += 1;
if ( ScrollPart.scrollTop == ( ScrollPart.scrollHeight - ScrollPart.offsetHeight ) ) {
clearInterval( timer );
ButtonDown.src = 'image/go_blank.gif';
timer = 0;
}
}

function GoUp() {
if ( ScrollPart.scrollTop == 0 ) {
clearInterval( timer );
ButtonUp.src = 'image/go_blank.gif';
timer = 0;
}
ScrollPart.scrollTop -= 1;
}

млин... сплошное расстройство...  С ума сойти... даже пропало желание далее код "вылизывать"  Я зол!

может есть у кого соображения на сей счет?  Не понял
« Последнее редактирование: 14-12-2007 17:32 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 06-09-2006 07:32 » 

К ScrollPart нельзя обращаться по имени - это не член window. Сперва нужно объявить переменную и присвоить ей ссылку на объект.
Код:
var ScrollPart = document.getElementById('ScrollPart');
Разрабатывать лучше не под IE, а под Mozilla, потом тестировать и доводить на Opera и IE. В таком порядке быстрее работоспособности добьешься - на IE работает многое из того, что неположено по стандартам. Конечно, некоторые недостатки IE надо знать и не писать несовместимого кода.
« Последнее редактирование: 14-12-2007 17:33 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines