Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Остановка автоскроллинга
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (1): [1] 

> Описание: Всё время проезжает одну картинку
Самоделкин
Отправлено: 03 Июля, 2007 - 13:45:27
Post Id



Junior Member


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2005  

Карма 1




Есть массив фотографий, который перебирается кнопками вверх и вниз.
Пытаюсь сделать, чтобы при удержании кнопки мышкой (onMouseDown) фотографии скроллились сами, останавливаясь при отпускании. Но при отпускании кнопки (onMouseUp) цикл всё время "проезжает одну остановку".

Данные:
document.getElementById("prt" ) - это окно, в котором находятся картинки.
countertwo - счётчик массива
При загрузке страницы выпадает случайная картинка, num2 - её номер в массиве.
ppaintfiles - массив имён файлов
ppaintwdt и ppainthgt - соответственно ширина и высота членов массива.

Вот общая функция скроллинга (для кнопочных событий onClick, true - вперёд, false - назад). Здесь всё работает.
CODE:
function scrollprt(direction) {
dlina = ppaintfiles.length;
// назначаем счётчик на выпавший портрет
countertwo = num2;
// Нижняя кнопка - вниз
if (direction == true)
{
if (countertwo < dlina-1)
{countertwo++;
with (document.getElementById("prt"))
{src=ppaintfiles[countertwo];
width=ppaintwdt[countertwo];
height=ppainthgt[countertwo];}
}
else {countertwo=0;
with (document.getElementById("prt"))
{src=ppaintfiles[countertwo];
width=ppaintwdt[countertwo];
height=ppainthgt[countertwo];}
}
}
// Верхняя кнопка - вверх
else
{
if (countertwo > 0)
{countertwo--
with (document.getElementById("prt"))
{src=ppaintfiles[countertwo];
width=ppaintwdt[countertwo];
height=ppainthgt[countertwo];}
}
[b]else {countertwo=dlina-1;
with (document.getElementById("prt"))
{src=ppaintfiles[countertwo];
width=ppaintwdt[countertwo];
height=ppainthgt[countertwo];}
}
}
// Заносим результат прокрутки в счётчик
num2 = countertwo;
}

Вот функция для остановки автоскроллинга с попыткой вернуться на нужную картинку (всё равно одну проезжает. Срабатывает только clearInterval()).
Переменные moverup и moverdn объявлены в основном скрипте.
CODE:
function stopcadr(direction) {
if (direction == true)
{
countertwo--;
with (document.getElementById("prt"))
{src=ppaintfiles[countertwo-1];
width=ppaintwdt[countertwo-1];
height=ppainthgt[countertwo-1];}
clearInterval(moverdn);
}
else
{
countertwo++;
with (document.getElementById("prt"))
{src=ppaintfiles[countertwo+1];
width=ppaintwdt[countertwo+1];
height=ppainthgt[countertwo+1];}
clearInterval(moverup);
}
}

Код кнопок
CODE:
<input type="button" id="up" style="background: #099 url(arrow1.gif) no-repeat center;" onClick="scrollprt(false);" onMouseDown="moverup=setInterval('scrollprt(false)',500);" onMouseUp="stopcadr(false);"><br>
<input type="button" id="dn" style="background: #099 url(arrow2.gif) no-repeat center;" onClick="scrollprt(true);" onMouseDown="moverdn=setInterval('scrollprt(true)',500);" onMouseUp="stopcadr(true);">

Не подскажете, где ошибка и как её устранить?
 
 Top
ETC Администратор
Отправлено: 03 Июля, 2007 - 14:38:48
Post Id



Flash-coder


Покинул форум
Сообщений всего: 5275
Дата рег-ции: Дек. 2003  
Откуда: TimeZero

Карма 26




Мммм, в таком месиве кода разобраться невозможно.
Можно готовую страничку со скроллом?
 
 Top
Furax
Отправлено: 04 Июля, 2007 - 03:48:15
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Самоделкин
А какого чёрта к кнопкам прописаны и onMouseDown, и onClick?

Поясняю наглядно, что происходит, когда ты нажимаешь кнопку.
1. Срабатывает событие onMouseDown, вызов setInterval(...).
2. Через 500 мс (+- сколько-то - в стандарте JavaScript ничего не сказано о том, через какое время после вызова функции setInterval() должно произойти первое выполнение её первого аргумента) происходит первая смена картинки.
3. Картинка меняется каждые 500 мс.
4. После отпускания кнопки мыши срабатывает событие onMouseUp и убивает интервальный вызов прокрутки.
5. Сразу после него срабатывает событие onClick, которое и делает один "лишний" шаг.

Поэтому onClick надо убрать. Если же тебе всё же хочется оставить его из соображений совместимости со старыми браузерами (в чём, однако, в настоящее время нет необходимости), то делай проверку типа браузера.

И ещё несколько замечаний.
1. Зачем в функции смены изображения в случае шага вперёд и назад разные ветки меняют картинку? Лучше одна после конструкции if...else.
2. Функция прекращения прокрутки не должна делать ничего кроме отмены интервала.
3. Попробуй убрать мышь с кнопки, не отпустив клавишу мыши, и отпустить кнопку вне её - после этого твой скрипт уже ни при каких условиях не прекратит менять картинки. Добавь обработчик события onMouseOut, который тоже должен прекращать листать картинки.
4. Я бы посоветовал вместо setInterval() использовать setTimeout(), причём вызывать его в конце функции смены картинки, а уж её [функцию] вызывать из обработчика onMouseDown. Таким образом смена картинок начнётся сразу после нажатия кнопки. Только не забудь поменять clearInterval() на clearTimeout().

Успехов!

(Отредактировано автором: 04 Июля, 2007 - 03:51:45)

 
 Top
Самоделкин
Отправлено: 13 Июля, 2007 - 06:31:11
Post Id



Junior Member


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2005  

Карма 1




Наконец-то добрался до форума. Спасибо, буду разбираться.
А зачем onClick, объясняю. Основной вариант: щёлкаешь кнопку - меняется изображение. Но поскольку изображений больше 20, а по условиям игры из них надо выбрать нужное, я и решил сделать дополнительную возможность прокрутки удержанной мышкой.

(Отредактировано автором: 13 Июля, 2007 - 06:37:27)

 
 Top
Furax
Отправлено: 13 Июля, 2007 - 06:48:27
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Самоделкин
Стало быть, дополнительный вариант самодостаточен. Основной не нужен.
 
 Top
Самоделкин
Отправлено: 13 Июля, 2007 - 07:22:36
Post Id



Junior Member


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2005  

Карма 1




Furax
Уже понял. Спасибо, всё получилось.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« JavaScript »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0411]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33