Просмотр полной версии : Самая простая в мире прокрутка... И нет нигде :-(
serdeles
17.07.2007, 18:26
Извините, что всё же спрашиваю "сотый раз". Но не нашёл ничего похожего - час лазил в поиске - аж голова опухла.
В общем, приспичило мне сделать прокрутку картинок. Всего их шесть, они распологаются горизонтально вряд. Видны тока две (маска). Справа и слева есть кнопочки. При наведении на правую кнопку, картинки должны двигаться влево - до шестой. При наведении на левую - они движутся вправо. Если убрать мышку, то всё просто останавливается - типа "пауза". Ни исходника, ни кода примерно решающих эту задачу, найти не удалось :-(
Есть у меня один код, но там в исходнике заморочки, так как мувик с картинками, который прокручивается и который лежит на главной сцене, имеет метку "in". Когда я пытаюсь сделать в новом файле такую же метку мувика, мне выскакивает окошко, что, типа, "in" зарезервировано системой.
on (rollOver) {
_root.right = "1";
}
on (rollOut) {
_root.right = "0";
}
Можно ли заменить "_root.right " на имя мувика (в смысле, на его метку)? Тогда, возможно, я решил бы эту проблему... Но чёта не выходит...
при наведении на любую из кнопок запускаешь onEnterFrame и двигаешь мувик где лежат картинку в нужную сторону... уводишь с кнопки - delete(onEnterFrame), чтобы остановить
serdeles
17.07.2007, 18:36
То есть вместо "on (rollOver)" надо "onEnterFrame" писать? Или это функция запускается для "on (RollOver)"?
Может, поделитесь кодом? Чтобы хотя бы более менее синтаксис видеть...
да эта функция запускается при on(rollOver)... она выполняет указанные действия при каждой смене кадра (т.е. со скоростью FPS)... а при on(rollOut) эту функцию удаляешь, чтобы остановить движение...
можешь глянуть http://www.kirupa.com/developer/mx2004/thumbnails.htm на XML внимания не обращай, но прокрутка реализована
Пример с исходником (http://www.kirupa.com/developer/mx2004/thumbnails.htm)
P.S. Опоздал...
serdeles
17.07.2007, 19:05
Спасибо, попробую...
Но в написании скриптов я дурак-дураком :-(
Ладно, буду пытаться написать путём проб и ошибок.
serdeles
17.07.2007, 19:06
CGandA, ничего не опоздал. Даже очень кстати твой исходник! Спасибо! :drinks:
serdeles
17.07.2007, 19:23
Глянул я исходник... Нашёл даже место, где "onEnterFrame" и дельта... Но блин, его оттудова ещё надо выковыривать, избавляться от всяких "createEmptyMovieClip" и прочее... Много гемора для моего уровня (точнее его плинтуса).
А как-то попроще это нельзя реализовать? Я привёл в начале код - там в принципе всё понятно и работает. Единственное, что там "root", где метка стоит непонятная у мувика с картинками... Может, всё же "root" сменить на имя мувика или ещё на чёнть?
левая кнопка.onRollOver = function(){
мувик_с_картинками.onEnterFrame = function(){
мувик_с_картинками._x--;
}
}
левая кнопка.onRollOut = function(){
delete мувик_с_картинками.onEnterFrame
}
правая кнопка.onRollOver = function(){
мувик_с_картинками.onEnterFrame = function(){
мувик_с_картинками._x++;
}
}
правая кнопка.onRollOut = function(){
delete мувик_с_картинками.onEnterFrame
}
serdeles
17.07.2007, 19:59
Спасибо, Wolsh! Это уже больше похоже на спасательный круг :yahoo:
serdeles
18.07.2007, 14:55
Всё работает! Именно то, что было надо!
Единственное, вдогонку хочу задать ещё ОДИН вопрос относительно кода (by Wolch):
Как задать предел прокрутки? То есть докрутить "мувик_с_картинками" до определённого места и чтобы дальше он не мог двигаться. Естессна в обоих направлениях (в данном случае, вправо и влево).
serdeles
18.07.2007, 15:57
Что, никто не в курсе?
Или может я не так объяснил...
В общем, видимая часть в галерее - это маска, расчитанная на две картинки. Всего в галерее - шесть картинок.
Надо сделать так, чтобы когда мувик с картинками докрутился до такой степени, что в маске видны последние две картинки - чтобы он останавливался, независимо от того, наведён ли курсор на кнопку, или нет.
То же самое и с началом галереи. В маске видны первые две картинки.
Я так думаю, какоие-то пределы нужно задать справа и слева, но как это сделать...
Что же тут сложного? Пора уже головой слегка своей тоже задумываться.
левая кнопка.onRollOver = function(){
мувик_с_картинками.onEnterFrame = function(){
if (мувик_с_картинками._x > маска._x+маска._width-мувик_с_картинками._width) {
мувик_с_картинками._x--;
}
}
}
левая кнопка.onRollOut = function(){
delete мувик_с_картинками.onEnterFrame
}
правая кнопка.onRollOver = function(){
мувик_с_картинками.onEnterFrame = function(){
if (мувик_с_картинками._x < маска._x) {
мувик_с_картинками._x++;
}
}
}
правая кнопка.onRollOut = function(){
delete мувик_с_картинками.onEnterFrame
}
serdeles
18.07.2007, 16:20
Спасибо!
serdeles
18.07.2007, 16:49
Всё сделал вроде как надо. Но работает всё же не совсем так....
Прицепляю исходник. Единственное, что там не устраивает - это остановка не в том месте (слишком уж далеко влево уходит галерея) при наведении на левую кнопку.
И потом когда в обратную сторону идёт, не доходит до конца, при наведении на правую.
В исходнике видно в общем, что к чему...
serdeles
18.07.2007, 17:23
Половину проблемы решил самостоятельно. Чтобы галерея не уходила слишком далеко влево при наведении на левую кнопку, прибавил цифровое значение к "_width":
if (gal._x > mask._x+mask._width-gal._width+95)
Остаётся вопрос с правой кнопкой - там этот номер не проходит...
serdeles
18.07.2007, 18:19
Ура! Проблема решена.
Даю код и исходник, на случай если кому понадобится.
b1.onRollOver = function(){
gal.onEnterFrame = function(){
if (gal._x > mask._x+mask._width-gal._width+95) {
gal._x-=5;
}
}
}
b1.onRollOut = function(){
delete gal.onEnterFrame
}
b2.onRollOver = function(){
gal.onEnterFrame = function(){
if (gal._x < mask._x+mask._width-45) {
gal._x+=5;
}
}
}
b2.onRollOut = function(){
delete gal.onEnterFrame
}
k1.onRollOver = function(){
gal2.onEnterFrame = function(){
if (gal2._x > mask2._x-mask2._width-gal2._width+530) {
gal2._x-=5;
}
}
}
k1.onRollOut = function(){
delete gal2.onEnterFrame
}
k2.onRollOver = function(){
gal2.onEnterFrame = function(){
if (gal2._x < mask2._x+mask2._width+75) {
gal2._x+=5;
}
}
}
k2.onRollOut = function(){
delete gal2.onEnterFrame
}
Ну конечно, если у тебя в маске прямоугольник стоит не ноль в ноль, а в галерее картинки тоже нифига не с нуля начинаются, то мои формулы в чистом виде бессильны :)
На будущее приучи себя все ставить в ноль, тогда маска._х всегда будет означать то место, откуда маска начинается ;)
Удачи
и не делать много сообщений подряд... есть кнопка "изменить"..
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.