PDA

Просмотр полной версии : Ищу скролл с опциями (возможно за оплату)


darkzip
12.05.2008, 04:05
Нужен простой скролл, но я здесь ничего подходящего (готового) не нашел, а разбираюсь в кодах (чтобы самому доделать до ума) плохо.

Суть проста: нужен скролл для текста и фото (две кнопки + бегунок), дизайн которых можно менять, кроме того чтобы колесом мыши можно было листать. И желательно, чтобы всё плавно двигалось. Заранее благодарю за исходники. Очень нужно, помогите плизз..

Wolsh
13.05.2008, 10:44
Вот, поковыряйся. Если что не поймешь, спрашивай. Рекомендую для тренировки попробовать сделать горизонтальный скроллер)))) Так сказать, домашнее задание.
Сорри за вес, там картинка)))
_______________

файл удален автором. ищем ниже - там лучше

darkzip
14.05.2008, 02:58
Кажется то, что мне нужно, буду пробовать! А плавность никак нельзя сделать (чтобы в конце не резко стопорился скрол, когда бегунок останавливаешь)...

Wolsh
14.05.2008, 12:14
1) Доработал код, добавив обработку нажатий на сам трек. Добавил также вашу любимую плавность (нигде не видел такого извращения, но пожалуйста:victory: Вот бы я ждал в фаерфоксе пока страница докатится))) Злая фича, но желание заказчика - закон:mosking:)
2) В этих примерах предполагается, что кнопки и бегунок прямоугольные и в крайних точках соприкасаются. Однако скроллер может быть и такого типа, как в МакОСах - когда бегунок "утопает" в кнопках. Тогда необходимо добавить переменную, определяющую глубину этого утопания. Смотрим второй файл, чтобы понять о чем это я)))))
3) И напоследок пара напутствий. Во-первых, при перерисовке этого добра помните главное правило - все элементы (кнопки и бегунок) должны иметь целочисленные размеры (например 20.0 а не 20.1) и графика в них должна стоять по _у "в ноль". Вы не открытку маме рисуете, а делаете графику для управления скриптами. Нарушение этих правил карается багами.
Во-вторых, просто так, если интересно - по этим ссылкам Вы найдете кучу скинов для ОС и, соответственно, кучу вариантов внешнего вида скроллера.
http://browse.deviantart.com/customization/skins/
http://wincustomize.com/skins.aspx?libid=1
Удачи, разбирайтесь, задавайте вопросы.

darkzip
15.05.2008, 03:52
Посмотри мой исходничек снова, у меня два вопроса:
1. трек не понимаю почему-то внизу уходит ниже кнопок (где именно это управляется?)
2. как сдеалать большее пролистывание от колесика мышки? (опять же где этот параметр?)

Wolsh
15.05.2008, 13:20
Перечитай внимательно третий пункт. В твоем файле ничто не стоит в ноль - кто в лес кто по дрова, как же скрипт должен работать с такой графикой? Ведь он пытается расставить всё по местам, рассчитывает расстояния и размеры и т.д. А у тебя даже трек стоит по игреку в -10. Я имею ввиду графику. Поверь, никто никогда не напишет тебе скрипт, делающий скроллер из чего угодно))))) Следуй правилам; ставить в ноль - первое правило дизайнера, делающего графику под скрипт. Пересмотри в редакторе свои кнопки и мои, и поймешь о чем это я.

Wolsh
16.05.2008, 11:56
Вот поправил твой скролл, может так понятней будет, что я имел ввиду под ставить в ноль. Ввел также множитель для колесика. И еще важный момент, сначала не заметил - ты использовал для рисования стрелки шрифт. А у него размеры есть - не точки, а текстового поля, и они гораздо больше, соотв. растягивают фактический размер клипа кнопки. Если уж так рисовать, то надо было разбить точки в шейп (2 раза ctrl+B). А вообще ставишь Snapping в Snap to Pixels и рисуешь нормальные пиксели)

DJ_Baton
22.05.2008, 22:52
скроллинг отличный у тебя, только вот кумарит немного то что маска программная и скролл к ней липнет, и сам скролл масштабируется, ИМХО классно было бы сделать так чтобы и скролл и маска устанавливались человеком там где он хочет и в том виде как он хочет, например маску твою не анимируешь а это уже имхо бок

Wolsh
23.05.2008, 02:12
Реально кумарит?)))
А что, вот этот кусок никак не расслабляет?
//устанавливаем размер и координаты "окошка". Эти параметры по желанию.
maska._width = target._width;
maska._height = 300
maska._x = 100
maska._y = 40Если Вы под "устанавливались человеком" имеете в виду потаскать руками в редакторе - ну мышь Вам в руки, удаляете этот кусок кода и делайте с маской что хотите. Скроллер можете сдвигать по горизонтали куда хотите/
В этом куске добавляем-вычитаем сколько надо.// совмещаем скроллер и маску
scroller_mc._x = maska._x + maska._width;Но по вертикали сдвигать не получится, и сделать высоту скроллера иной, чем у маски - тоже. Это надо сильно код переписывать, он для общего случая написан, не для креативных дизайнерских разработок)))) Для нестандартных случаев придется писать нестандартный код, так ведь?
Ну и, собственно, Вы какую анимацию-то подразумеваете? Вот здесь анимация?
зЫ. Маленькая подсказка для креативщиков: весь код в кадре выполняется ДО того, как будет прорисован кадр. Считывание данных о маске происходит в первую долю секунды, и что с ней произойдет дальше, скроллера уже не волнует)))) Можете двигать ее, увеличивать-уменьшать и т.д. Главное чтобы в первом кадре она "настроила" скроллер. А дальше - дерзайте!

DJ_Baton
23.05.2008, 04:15
ну там я разобрался, в принципе всё гуд, маску к мувику можно отдельную делать для анимации ;)
но вот более серьёзный трабл, прочти: http://www.flasher.ru/forum/showthread.php?p=740849#post740849
думаю это будет актуально для всех кто с таким сталкивался =)

DJ_Baton
23.05.2008, 06:28
Я вот думаю если привязать к маске хиттест какой-нить чтобы твой скрипт для колеса работал ТОЛЬКО когда мыш в поле маски, тогда вероятно это решит проблему на сайтах с общим скроллингом
Или так:
Если
X мыши больше Х маски
Y мыши больше Y маски
Х мыши Меньше X маски + WIDTH маски
Y мыши Меньше Y маски + WIDTH маски
тогда только запускать скрипт колеса
По идее колесо будет скроллировать поле ТОЛЬКО тогда когда мыш наведена на скроллируемый контент

Жень Шень
23.05.2008, 12:16
Я вот думаю если привязать к маске хиттест какой-нить чтобы твой скрипт для колеса работал ТОЛЬКО когда мыш в поле маски, тогда вероятно это решит проблему на сайтах с общим
Привет!
Зачем хиттест! Есть у onMouseWheel второй параметр. Его и пользуем.
Смотрим вариант:

Wolsh
23.05.2008, 12:23
Жень Шень : Прикольно! Я, честно сказать, даже не знал)))) В хелпе про какойто стринг говорится, а делаешь параметр стрингом - ругается. Потому и не разобрался))) Спасибо!
Только я бы еще скроллер включил, а то както странно когда мышь над скроллером а колесиком не двигается))
// прокрутка колёсиком мыши
pimp.onMouseWheel = function(delta, target2_mc) {
if (target2_mc==target | target2_mc==pimp |
target2_mc==top | target2_mc==down |
target2_mc==track_top | target2_mc==track_down) {
this._y -= delta;
scrolling();
}
};

DJ_Baton
23.05.2008, 17:27
заменил старый скрипт в своей флэшке на новый колесо совсем перестало работать... и что есть target2_mc я не понял де он.... у меня скроллируемый мувик называется txt, соответственно вот скрипт:
// объявляем маску и скроллируемый клип
var target2_mc:MovieClip;
var maska:MovieClip = mask_mc;
var target:MovieClip = txt;
//устанавливаем размер и координаты "окошка". Эти параметры по желанию.
maska._width = 590;
maska._height = 275;
maska._x = 310;
maska._y = 427;
// совмещаем маску и таргет
target._x = maska._x;
target._y = maska._y;
target.setMask(maska);
// совмещаем скроллер и маску
scroller_mc._x = maska._x+maska._width;
scroller_mc._y = maska._y;
// cтроим-ресайзим скроллер
var track:MovieClip = scroller_mc.track_mc;
var pimp:MovieClip = scroller_mc.pimp_mc;
var top:MovieClip = scroller_mc.topbut_mc;
var down:MovieClip = scroller_mc.downbut_mc;
track._height = maska._height;
top._y = top._x=down._x=0;
down._y = maska._height-down._height;
pimp._x = 0;
// для бегунка, частично уходящего в кнопки (как на MacOS), указываем глубину
var macradius:Number = 4;
//
// константы
var sh:Number = track._height;
// высота скроллера (маски)
var dh:Number = down._height;
// высота кнопки Вниз
var th:Number = top._height;
// высота кнопки Вверх
var ph:Number = pimp._height;
// высота бегунка
var pc:Number = pimp._height/2;
// центр бегунка
var pimpway:Number = sh-dh-th-ph+macradius*2;
// расстояние, на которое может смещаться бегунок
var targetway:Number = target._height-sh;
// расстояние, на которое должен смещаться таргет
var pimp_start:Number = th-macradius;
// лимит смещения бегунка вверх
var pimp_stop:Number = th+pimpway-macradius;
// лимит смещения бегунка вниз
pimp._y = pimp_start;
// функция зависимости положения таргета от положения движка
function scrolling() {
pimp._y = pimp._y<pimp_start ? pimp_start : pimp._y>pimp_stop ? pimp_stop : pimp._y;
track_down._y = pimp._y+ph;
track_down._height = sh-track_down._y-dh;
track_top._height = pimp._y-th;
var newtarget_y:Number = maska._y-(pimp._y-pimp_start)*(targetway/pimpway);
pimp.onEnterFrame = function() {
target._y = Math.ceil(target._y+(newtarget_y-target._y)/4);
target._y == newtarget_y ? delete pimp.onEnterFrame : null;
};
}
// драг бегунка
pimp.onPress = function() {
this.startDrag(false, 0, pimp_start, 0, pimp_stop);
this.onMouseMove = scrolling;
};
pimp.onRelease = pimp.onReleaseOutside=function () {
this.stopDrag();
delete this.onMouseMove;
scrolling();
};
// кнопки
top.onPress = function() {
this.onEnterFrame = function() {
pimp._y--;
scrolling();
};
};
top.onRelease = top.onReleaseOutside=function () {
delete this.onEnterFrame;
};
down.onPress = function() {
this.onEnterFrame = function() {
pimp._y++;
scrolling();
};
};
down.onRelease = down.onReleaseOutside=function () {
delete this.onEnterFrame;
};
// прокрутка колёсиком мыши
pimp.onMouseWheel = function(delta, target2_mc) {
if (target2_mc==txt) {
this._y -= delta*5;
scrolling();
}
};
Mouse.addListener(pimp);
// создаем прозрачные кнопки трека (кнопки быстрой перемотки)
var track_top:MovieClip = scroller_mc.createEmptyMovieClip("tt", 100);
with (track_top) {
moveTo(0, 0);
beginFill(0x00ff00, 0);
lineTo(0, sh);
lineTo(track._width, sh);
lineTo(track._width, 0);
endFill();
}
var track_down:MovieClip = track_top.duplicateMovieClip("td", 110);
// размещаем кнопки трека
track_top._x = track_down._x=0;
track_top._y = th;
track_top._height = 0;
track_down._y = th+ph;
track_down._height = sh-th-dh-ph;
// нажатия на трек
track_top.onPress = function() {
// замедляющееся движение центра бегунка к мыши
this.onEnterFrame = function() {
// ускорение зависит от делителя
pimp._y = Math.floor(pimp._y-(pimp._y+pc-scroller_mc._ymouse)/10);
scrolling();
};
};
track_top.onRelease = track_top.onReleaseOutside=function () {
delete this.onEnterFrame;
};
track_down.onPress = function() {
// замедляющееся движение центра бегунка к мыши
this.onEnterFrame = function() {
// ускорение зависит от делителя
pimp._y = Math.ceil(pimp._y+(scroller_mc._ymouse-pimp._y-pc)/10);
scrolling();
};
};
track_down.onRelease = track_down.onReleaseOutside=function () {
delete this.onEnterFrame;
};
// НЕ отменяем Руку на кнопках и бегунке
pimp.useHandCursor = true;
top.useHandCursor = true;
down.useHandCursor = true;
track_down.useHandCursor = true;
track_top.useHandCursor = true;

Жень Шень
23.05.2008, 18:22
Я, честно сказать, даже не знал)))) В хелпе про какойто стринг говорится, а делаешь параметр стрингом - ругается. Потому и не разобрался...

Я в свое время тоже на этом споткнулся. Но, на форуме помогли разобраться с "липовым" стрингом. Смотреть тут (http://www.flasher.ru/forum/showthread.php?t=105349)

DJ_Baton
23.05.2008, 19:27
эм... ну подскажите чего после замены старого скрипта на ваш перестал скролл мыши работать вообще ? (( я только target_mc на txt заменил и всё

Wolsh
23.05.2008, 20:02
Вот поэтому и не работает. Чем Вас таргет не устроил?))))) Во всем коде таргет, а здесь Вам какой-то тхт понадобился)

По поводу target2_mc. Это ссылка на клип, находящийся под курсором. Т.е. это не какой-то конкретный физический клип, а только ссылка, подобно тому как можно написать my_mc = _root.createEmptyMovieClip("ferrari_mc", 10) Имя созданного клипа (Instance Name) будет ferrari_mc, но он будет доступен отсюда по короткой ссылке my_mc, даже если Вы создадите его в тридевятом королевстве и по имени ferrari_mc достучатся не сможете. Так вот здесь target2_mc - такая же ссылка, переменная, значение которой заполняет сам объект Маус и отдает ее листенеру в эвентОбжекте вместе с дельтой (смещением колесика). Интересно, можно ли построить на этом аналог хиттеста для мыши)))?

Жень Шень
23.05.2008, 20:03
эм... ну подскажите чего после замены старого скрипта на ваш перестал скролл мыши работать вообще ? (( я только target_mc на txt заменил и всё
В топике столько примеров... В каком была замена. Может стоит файл подцепить?
а здесь Вам какой-то тхт понадобился
И то правда...

DJ_Baton
23.05.2008, 20:04
Апдейт - разобрался, нашёл кривости, он скроллирует только если мыша наведена на контент а не на область скроллирования, т.е. на примере с картинкой работает только если наведено на картинку, а если область скроллирования больше то ничерта не пашет :)

DJ_Baton
23.05.2008, 20:22
та не, всё пофиксил, нашёл ряд багов...
в общем чтоб решить проблему с наведением на контент поверх всего контента кинул маску с альфой = 0... кстати попробуйте поскроллировать текст, узнаете много нового ))) или лучше даже несколько текстовых элементов маленьких
проблема с передачей фокуса сайту так и не решилась, фкус тупо глушится и колесо всё равно работает только в рамках флэшки
В идеале должно быть прописано чтобы скрипт работал ТОЛЬКО если курсок по X и Y в рамках маски, по другому он тупо привязывает колесо к флэшине а сам сайт стоит на месте при прокрутке колесом

Wolsh
23.05.2008, 20:41
А когда привязываете к координатам - всё нормально работает на сайте, фокус сам переходит на скроллер браузера?
нашёл кривости, он скроллирует только если мыша наведена на контент а не на область скроллирования
в 13 ответе был код чтобы область скроллера тоже реагировала))) Не игнорируйте меня, я еще в теме))))

Wolsh
24.05.2008, 16:53
кстати попробуйте поскроллировать текст, узнаете много нового ))) или лучше даже несколько текстовых элементов маленьких

Сорри, ничего нового не узнал про скроллирование текста. Если у Вас корячатся буквы, проверьте координаты текстовых полей - они должны быть целочисленными. У меня вот тут все гладко, много "маленьких текстовых элементов"))) Создается и выводится список установленных шрифтов с превью. Скроллер новый))) Код тотже, с последними дополнениями.

Зато другую проблемку пофиксил. Когда в таргете вложенные клипы, определение области скроллирования не работало. Сравнение с парентом спасло))))

DJ_Baton
25.05.2008, 04:29
определение области скроллирования не работало.
вот и я о том же ;)

Котяра
25.05.2008, 05:01
Если интересует во вложении компонент (просто кидаешь на таймлайн - и в параметрах указываешь мувик. скины меняются код открыт.. колёсико мыши не работает, но вставить нетрудно
19586

DJ_Baton
26.05.2008, 05:40
вот ещё баг нашёл, если страниц несколько в одной прокрутил скроллинг вниз, перешёл на следующую страницу и оно контент второй страницы крутит вниз, т.е. в идеале нужно чтоб оно значения при загрузке обнуляло
Я это пофиксил тем что раскидал скроллы в 2 слоя чтобы 2 кейфрейма со скроллом не повторялись подряд

DJ_Baton
26.05.2008, 23:58
Походу скроллинг в Сафари под МакОС не работает почему-то

iNils
27.05.2008, 00:04
Мышкой? Ага, есть такое.

etc
27.05.2008, 00:58
Походу скроллинг в Сафари под МакОС не работает почему-то

Это лечится.

DJ_Baton
27.05.2008, 02:00
не подскажешь как ? а то у меня обычный писюк с виндой, тестить негде...

etc
27.05.2008, 02:19
http://blog.pixelbreaker.com/flash/swfmacmousewheel/

DJ_Baton
27.05.2008, 02:34
Спасибо, т.е. во флэше никаких изменений, тупо нужно прикрутить JS подставив название и параметры под свою флэшину ?

etc
27.05.2008, 09:42
Там все написано, что и как.

DJ_Baton
27.05.2008, 12:10
Ну я там строк о том что что-то надо прописывать во флэше не нашёл, вот и переспросил, ответить сложно что ли ?

etc
27.05.2008, 12:43
Да, сложно, особенно тем, кто не может собственными глазами прочитать, скачать архив и посмотреть пример.

DJ_Baton
27.05.2008, 12:49
Блин а вот архива-то я и не заметил в начале, пасиба

pyatifan
27.05.2008, 13:33
Динамический текст это хорошо.
Хочется подгружать внешний текст!
Если TextField создано вручную, достаточно указать (в поле var) название переменной для VariablesNum.

System.useCodepage = false;
loadVariablesNum("mytext.txt", 0);

Как задать var для TextField программно?

Или как сделать вручную подгружаемый текст на линейке "content" в этом варианте скролла?

Wolsh
27.05.2008, 14:52
Да как всегда, в чем разница-то?
Создаете в руте пустой мувик, в нем создаете текстовое поле, его СВОЙСТВУ text присваиваете загруженный текст. Вот только не советую пользоваться древними методами, которые Вы привели, особенно НИКОГДА System.useCodepage !!!!!
Заметьте также, что настраивать скроллер придется после загрузки текста, т.е. по наступлению события онЛоад

etc
27.05.2008, 14:55
Вот, что будет, при использовании useCodepage:

http://etcs.ru/files/codepage.png

pyatifan
27.05.2008, 21:12
Создал мувик (instance name: target_mc), вставил в него текстовое поле и квадрат (типа текст с картинкой). Не работает. В чем может быть дело?

Wolsh
28.05.2008, 01:03
В чем может быть дело?
Там столько ошибок, что я затрудняюсь перечислить даже половину. Это при том, что Вы вобщем-то ничего и не делали - те две строчки кода никак бы не смогли загрузить Ваш текст в таргет)))) Получается, что я всё сделал за Вас, хотя такой подход здесь не приветствуется. Но я очень надеюсь что Вы действительно поковыряетесь в этом коде и чему-то научитесь.
К тому же Вы не вняли моим словам. А я не могу делать как в прошлом веке.
Поэтому Вам придется разобраться сразу с несколькими темами. Выделяете непонятную команду, жмете F1 и жадно читаете. Я с удовольствием также отвечу на Вашу вопросы, если они не будут свидетельствовать о лени читать хелп)))) Удачи!

pyatifan
28.05.2008, 23:07
Спасибо!
Освоился. Но вопросы есть )))
1. Как участвует "cell" в прокрутке колесика мышки. Непонятен смысл этой переменной, т.к. ей присвоен только тип MovieClip

// переменная для определения области при прокрутке колесиком мыши
var cell:MovieClip;

В прикрепленном примере, если курсор находится над пустой областью справа от черного квадрата, то колесико не реагирует.
2. Раз уж скролер в отдельной функции, то напрашивается опиональность применения скролера. Т.е. если "maska>target", то скролер не применять. В примере текстовый файлик с маленьким количеством текста, если его применить, то видно что скролл не нужен ))

Wolsh
29.05.2008, 00:25
2. Да, конечно согласен. Просто начинался топик слегка проще))) Речь шла только о рукотворных объектах. Конечно, при программном производстве такое должно быть предусмотрено (я как раз недавно писал класс, программно рисующий псевдомаковский скроллер под динамический таргет, там это предусмотрено. Но не так как Вы думаете ;) Иногда скроллер является частью дизайна и не может не рисоваться, так как ему отведено пространство. И еще нюанс - правильный скроллер имеет динамический "движок" - он должен менять размер в зависимости от размера таргета. Если контента много - движок короткий, и проходимый им путь соотв. больше. И наоборот. А если контент легко помещается под маску, но скроллер предполагается рисовать во чтобы то ни стало - тогда скроллер рисуется "зажатым" или без движка. Могут быть варианты - скроллер рисуется по высоте маски или по высоте контента). Ну а просто отмену скроллера Вы и сами сделаете)))
1. Переменная cell... Здесь она просто объявляется, это нормально, а когда будете писать свои классы, Вы будете делать такое постоянно))). Используется она дальше в коде прокрутки колесиком мыши. Если почитаете этот топик внимательно выше(стр.2), Вы найдете про нее немного. Там она упоминается как target2_mc (©Жень Шень). Это переменная обработчика события onMouseWheel, в которую мышь записывает ссылку на самый глубоковложенный из находящихся под ней клипов или текстфилдов. Используется соответственно для определения, находится мышь над таргетом (или скроллером) или нет (тогда колесико не скроллирует). Поэтому и в "дырках" таргета колесико не скроллирует))). Если бэкграунд Вам не нужен, сделайте его прозрачным, но дыр быть не должно - если под мышкой не будет мувика или текстфилда, скроллирования не будет.

Denis Davidov
30.05.2008, 18:55
Всем здрасьте.
Переписал Ваш пример на класс.
В либе должен быть пролинкованый обхект sroller_mc с __pimp,__top,....

p/p/s/ import'ы там можно закомментить
пример использования:

this.__scroller=this.attachMovie("scroller_mc","scroller_mc",10);
trace("TxtField:drawScroller "+this.__scroller);
this.__scroller.__proto__=Scroller.prototype;
this.__scroller.init(__txt_mc,__mask_mc);
this.__scroller.initActions();

LexXL
05.06.2008, 11:31
Дорогой Wolsh пример реально хорош! Спасибо мне это как раз в тему вписалось, мне конечно не удобно просить но не мог бы ты выложить примерчик где в клип "conten" подгружаеться внешний файлик swf? Даже если не получиться все равно спасибо за исходнички!

Wolsh
06.06.2008, 01:47
Смотря что в этом внешнем файле. Для скроллирования жизненно важна физическая высота контента. Если это подгружаемая флэшка, узнать ее высоту невозможно. То есть Вы узнаете высоту ее содержимого, но не те размеры, которые задавались в панели Пропертис Документу. Понимаете о чем я? Загрузившая ее флэшка со скроллером будет считать ее высотой реальный размер всего содержимого, и в результате скроллирования Вы увидите совсем не то что хотели))))
Есть только один выход, если Вы сами создаете подгружаемую свф, можете создать в ней переменные, в них сохранить нечитаемые данные - размеры документа, цвет фона, фпс если надо. И после загрузки запросить эти данные, сделать маску необходимых размеров и фон нужного цвета и т.д.

LexXL
06.06.2008, 09:08
а я конечно понял что вы имеете в виду, ну если опустить такой момент и предположить что я сам буду устанавливать размер создаваемых swf-слайдов "по высоте содержимого" - можно посмотреть на пример чтото у меня не совсем получается.

darkzip
06.06.2008, 09:13
Делается элементарно это! Я делал двумя способами:

1. в CONTENT кладу прозрычный символ размером с подгружаемую флэшку.
2. в CONTENT ставишь по углам точки еле заметные (в цвет фона).

В обоих случаях скролл и внутренности строятся на основе размеров (ширина, высота).

LexXL
06.06.2008, 11:27
Сейчас помудрил с этими вариантами и все равно не получается, если делать прозрачный символ и загружать потом на его место внешний swf то скрол работает, только вот сам клип виден полностью на экране а не в области маски, так что если все же есть примерчик поделитесь, и еще вопрос такой если у меня много файлов различной "высоты" то можно ди каким нить образом это реализовать все таки:o??

Wolsh
06.06.2008, 11:35
LexXL, потерпите до вечера. Я не могу на работе делать Вам исходники))))

Wolsh
06.06.2008, 23:41
Вот пример. В архиве подгружаемый мувик (экстремальный, не забудьте охладить процессор), в котором я в первом кадре рута прописал свойства
autor_width = 550
autor_height = 400
autor_color = 0x000066
После загрузки клипа в таргет в таргете создаются еще два клипа. Один ниже загруженного, это бэкфон. Значение цвета берется из прочитанного свойства autor_color, размеры - из свойств autor_height и autor_width. Таким образом клип теперь не прозрачный, а имеет фон) Этот же клип-фон я дублирую на слой выше загруженного и объявляю для него маской. Теперь наш клип обрезан как задумал автор))) Однако реальные размеры его от этого не поменялись! Поэтому при настройке главной маски и скроллера используются не высота и ширина таргета, как обычно, а ширина и высота, полученные из переменных загруженного клипа.
Таким образом Вы можете прописать во всех клипах своего проекта их свойства, не читаемые скриптом непосредственно из свф-файла, и считывать их при загрузке, и настраивать ваше отображение.
Удачи!

LexXL
07.06.2008, 11:10
То что нужно! Огромное спасибо, думаю этот пример еще не раз кому нить пригодиться.

Котяра
17.06.2008, 23:04
Wolsh, Немного не понял зачем создавать программную маску и програмное положение скроллера? Когда это может пригодиться? в моем примере скроллер как компонент использовался большое кол-во раз, причем в основном флэш-дизами или начинающими программистами. сложностей не вызывал. кинул маску, кинул скроллер. указал размер скроллируемой области, указал мувик контента. все. ничего программить не надо. все задается в пропертях скролла, причем контентный мувик может быть хоть динамическим, хоть каким. ползунок опять же увеличивается соразмерно останку, и скины рисуются на раз-два. скролл по мышке.. просто не нужен был. доделать несложно.
И вообще компонент нужно делать компонентом (ИМХО)

Wolsh
18.06.2008, 00:22
Когда это может пригодиться?
Забавный вопрос. Мне - всегда. Я объекты по координатам обычно размещаю, "на глаз" только наброски рисую или картины. И Вам что мешает выбросить код программной маски и использовать нарисованную руками? Для этого переменным, используемым далее в коде, и присваиваются ссылки на объекты в самом начале скрипта, в одном месте. И код скроллера отделен от скриптов загрузок, создания масок, таргетов и т.д. Не надо смешивать стили, грузить текст из XML-файла в рукотворный клип таргет это мракобесие какое-то. Или программируем, или рисуем. В данном случае показано, как РУКОТВОРНЫЙ СКРОЛЛЕР может быть использован в любой ситуации (хотя я и не довел дело до аттача его из библиотеки :) но думаю кому надо, тот легко с этим справится)
Кроме того, о каком файле речь? Началась тема одним человеком, для него был сделан исходник с рукотворными объектами. Потом другие ребятки просили реализовать другие вещи и получили другие исходники. А универсальный компонент для вебдизелей есть во Флэше - пользуйтесь на здоровье) Я вот вебдизель, и ни разу не пользовался компонентами. Легче самому написать.
Так о чем Ваш пост был?

LexXL
18.06.2008, 10:21
привет Wolsh, слушай а как нить можно "разгрузить" твой примерчик, а то моей машине коре 2 дуре(при видяхе 7600 на 512м) через некоторое мгновение выдает сообщение
A script in this movie is causing Adobe Flash Player 9 to run slowly. If it continues to run.... Do you want to abort the script?
может воткнуть задержку по времени или еще кокое-нить ограничение... Откликнесь плиз

Wolsh
18.06.2008, 12:21
Это похоже скрипт в обработчике колесика мыши. Он разный здесь во всех примерах, поскольку я сам первый раз столкнулся с определителем "над чем мышь". Ну и видимо к Вашему проекту не подходит. Покажите здесь этот кусок (onMouseWheel) или в личку напишите, чтоб здесь частные случаи не рассматривать))
Возможные причины - while() не находит рут и впадает в бесконечный процесс. Возможно, в подгружаемых свф рут залочен. Если Вам не обязательно нужно, чтобы скролл колесиком работал только когда курсор над скроллером или маской, можно просто взять код обработчика из первых исходников. Если обязательно, то пожалуй нужно писать хитТест.
И да, параметры машины здесь не при чем)))) Это просто бесконечный цикл. Хотелось бы выяснить условия, при которых он возникает, чтобы гарантированно исправить исходник.

Wolsh
21.06.2008, 01:39
Всётаки пришлось сдаться и отказаться от второго параметра в onMouseWheel() и использовать старый добрый хитТест)))) Стабильный скрипт выглядит так:
// прокрутка колёсиком мыши
pimp.onMouseWheel = function(delta) {
// проверяем, под мышкой ли маска или скроллер
if (maska.hitTest(_xmouse,_ymouse) || scroller.hitTest(_xmouse,_ymouse)){
this._y -= delta*5;
scrolling();
}
};

alexpro
27.07.2008, 22:26
А как сделать чтобы в этом скролле картинка и текст подгружались через XML?

Wolsh
27.07.2008, 22:49
А какое отношение имеет скролл к XML? Какая разница, чем Вы загружаете данные в таргет, скроллер его скроллирует и всё.

alexpro
28.07.2008, 13:37
Хотелось бы загружать в скролл контент через XML чтобы не изменять данные каждый раз вручную (фото и текст). Не могли бы Вы подсказать как это сделать?

PS
Хочу потом связать XML с PHP чтобы пользователь мог самостоятельно менять текст и картинки в скроллере через панель администрирования.


Сорри, я не очень разбираюсь с AS.
Большое спасибо.

Squishy
16.10.2008, 20:47
Подскажите пожалуйста как можно сделать такой скроллинг:
MovieClip, в который подгружается текст из *html документа, этот текст и должен прокручиваться.
Чтобы при добавлении нового текста в html он появлялся в MovieClip'e, не обрезался, но сам MovieClip оставался на главной сцене определенного размера(например 250*250пикселей), независимо от к-ва строк в подгружаемом html.

Wolsh
16.10.2008, 22:35
Squishy, а что значит "при добавлении нового текста в html он появлялся в MovieClip'e"? Вроде это и есть "динамический контент".
Ну и, видимый размер клипа с текстом определен размером маски. Задайте маске нужные Вам размеры (cм. строчки 11-15) - будет видна только эта область, а хтмл-текст будет скроллироваться. Вот пример (антихудожественный но наглядный)))

Squishy
16.10.2008, 23:58
да, динамический контент.
спасибо за пример, с маской разобралась, но: в отдельном файле все работает, скроллинг крутится, текст подгружается...когда вставляю в флеш-сайт htm не подгружается, а скроллинг прокручивает "пустое место".
Наверно дело в том, что скроллинг у меня располагается не на главной сцене, а в MovieClip'e, в котором находятся странички самого сайта и на одной из них - скроллинг.

Wolsh
17.10.2008, 00:12
В скрипте, что был на слое Текст, замените _root на this

Squishy
17.10.2008, 01:12
спасибо, работает теперь.
...одна проблема вытекает из другой)) скроллинг отобрадается, все работает...но на всех страничках сайта)))а должен только на первой. Можно ли как-то заставить скроллинг отображаться только на первой странице? Странички сайта сделаны так: MovieClip, в нем саи странички: 1й фрейм - 1я страница, 2й фрейм - 2я страница т.д. Пробовала на вторую и дальше страницы вставить скроллинг, но с _root(не отображалось же))) - не помогло
п.с. простите, если я уже не по теме полезла:away:...недели 2 уже мучаюсь с этим скроллом

Wolsh
17.10.2008, 07:47
Так... Немного непонятно - Вам его просто удалить надо при переходе на следующие страницы - ну так просто удалите все три объекта при нажатии на кнопку меню. Примерно так
menu_p2.onRelease = function(){
_mc.scroller_mc.swapDepths(_mc.getNextHighestDepth());
_mc.scroller_mc.removeMovieClip();
_mc.mask_mc.removeMovieClip();
_mc.target_mc.removeMovieClip();
_root.gotoAndStop(2);
}где _mc - это клип, в котором содержится скроллер. Однако надо посмотреть, что у Вас произойдет при переходе со второй страницы на первую)) Вобщем, на будущее - так не стоит делать. Если начинаете программировать, загружать что-то из сети, создавать элементы программно - про кадры на основной шкале надо забыть - это два разных типа флэша - "мультик" и "приложение". Переход по кадрам напрочь сбивает флэш, скрипты выполняются по несколько раз, объекты, которыми скрипт управляет - то они есть, то их нет на сцене (в текущем кадре) - вобщем, полный хаос.
В Вашем случае, наверное лучше всего было бы нарисовать маску руками, создать клип таргет с текстовым полем для загрузки - тоже руками, т.е. на сцене, и при переходе на другой ключевой кадр, где их нет - они просто удалятся. Просто в моем скрипте они созданы программно и конечно, сами по себе никуда не исчезнут)

Squishy
17.10.2008, 15:31
решила проблему удаления скролла с других страниц - просто в мувиклип, где страницы в фрейме где 1-я страница вставила еще мувиклип и в него скролл - все работает! ура!))
правда почему-то когда вставила скролл на сайт - перестала работать прокрутка роликом мыши, хотя
pimp.onMouseWheel = function(delta, cell) {
есть, а сама полоса прокрутки немного "залазиет" на кнопки быстрой перемотки странички(стрелочки)
ну с этим я наверно разберусь, пофантазирую)))
Wolsh, спасибо Вам большое за помощь!

CnSilver
07.12.2008, 05:52
Squishy, а что значит "при добавлении нового текста в html он появлялся в MovieClip'e"? Вроде это и есть "динамический контент".
Ну и, видимый размер клипа с текстом определен размером маски. Задайте маске нужные Вам размеры (cм. строчки 11-15) - будет видна только эта область, а хтмл-текст будет скроллироваться. Вот пример (антихудожественный но наглядный)))

Прекрасный пример, но есть одно НО :confused: Ни один из Ваших примеров не работает в Фаерфохе и Опере (т.е. не хочет мыша скролировать, только кнопочки на скроллбаре работают), решаемо ли это вообще?

Wolsh
07.12.2008, 21:53
К сожалению не могу Вам помочь - у меня всё работает. Попробуйте правильно вставлять флэшку - Опера и Фаерфокс отличаются от ИЕ именно в этом вопросе. ИЕ использует activeX, остальные включают флэш как плагин. Используйте скрипт, сгенерированный программой Флэш при публикации или SWF Object.
Удачи!

CnSilver
07.12.2008, 23:10
Да я уже по всякому пробовал, вот два примкера при помощи которых вставляю.
1

function showFlashObject(objID, objSource, objWidth, objHeight, objQuality, objWmode, objBgcolor)
{
//page url
var pageUrl = self.window.location.href;
if(pageUrl.substring(0,5) == 'https') {
swfUrl = "https";
} else {
swfUrl = "http";
}
/* Default Value Setting */
if (objID == "") objID = 'ShockwaveFlash1';
if (objWidth == "") objWidth = '0';
if (objHeight == "") objHeight = '0';
if (objQuality == "") objQuality = 'best';
if (objWmode == "") {
objWmode = 'transparent';
} else {
objWmode = '';
}
/* Flash 8.0 version */
document.write('<OBJECT id="' + objID + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"');
document.write('type="application/x-shockwave-flash" ');
document.write('data="' + objSource + '" ');
document.write('codebase="' + swfUrl +'://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ');
document.write('WIDTH="' + objWidth + '" HEIGHT="' + objHeight + '">');
document.write('<PARAM NAME=menu value=false>');
document.write('<PARAM NAME=allowScriptAccess value=always>');
document.write('<PARAM NAME=wmode value="'+ objWmode +'">');
document.write('<PARAM NAME=movie VALUE="'+ objSource +'">');
document.write('<PARAM NAME=quality VALUE="'+ objQuality +'">');
document.write('<PARAM NAME=bgcolor VALUE="'+ objBgcolor +'">');
document.write('<embed allowScriptAccess="always" swLiveConnect="true" src="' + objSource + '" menu="false" quality="' + objQuality + '" wmode="' + objWmode + '" bgcolor="' + objBgcolor + '" width="' + objWidth + '" height="' + objHeight + '" type="application/x-shockwave-flash" pluginspace="http://www.macromedia.com/go/getflashplayer">');
document.write('</OBJECT>');
}



и второй пример (приводить код не буду) - это код при помощи которого Dreamweaver вставляет флэш файлы на страницы РНР

может хотя бы какой нибудь намек на то, как лучше вставлять мувиклипы в РНР?

Wolsh
08.12.2008, 10:18
Ага. Не ставить wmode = 'transparent'.

CnSilver
08.12.2008, 23:22
Но тогда я не смогу прозрачные флэшки цеплять ((

Wolsh
09.12.2008, 01:01
Что-то слабо верится, что у Вас скроллер скроллирует что-то прозрачное, и под этим прозрачным есть текст или картинка хтмл-страницы... Кроме того, то что плагины не получают события колеса мыши в режиме прозрачности - это только один из десятка багов. Надо всегда сто раз подумать, нужна ли прозрачность на самом деле. В 99 случаях из ста - не нужна. Не создавайте себе неразрешимые проблемы)))

CnSilver
09.12.2008, 04:52
Ну в моем примере наверное как раз и есть 1% из 100
В любом случае спасибо за разъяснения.

Evgenia Chirkova
14.12.2008, 02:40
Всем доброго времени суток!
Wolsh, прошу прощения за беспокойство, но не могли бы Вы пояснить на пальцах для начинающей.. Взяла за основу Ваш скрипт для скролла O:-), передела под свои файлы. все работает, но как только подгружаю готовую swf_ку в другой ролик — динамический текст перестает в нее подгружаться. Что-то похожее было уже однажды, тогда были проблемы с уровням, насколько я поняла (но я могу ошибаться :) )... Из-за чего это на самом деле происходит и как с этим бороться?.. Или по крайней мере, где об этом можно почитать? Заранее спасибо.

Wolsh
14.12.2008, 06:45
Евгения, посмотрите посты 62-63 (на седьмой странице)
Проблема из-за того, что я в примере загрузки текста использовал пути через _root.
Если предполагается изменение рута, надо заменить _root на this... Ну и возможно по месту еще посмотреть.
В Вашем случае, т.е. при загрузке флэшки в другую, корень загруженной меняется на рут отцовской, отсюда и проблемы... Извините, я еще не профессионал и не смог предусмотреть всех вариантов использования((

Evgenia Chirkova
14.12.2008, 12:17
Wolsh, спасибо ! посмотрю, поэкспериментирую.
PS: ох, уж кому-кому, а Вам грех жаловаться на профессионализм =). искренне Вами восхищаюсь ^_^

pps: Wolsh, спасибо еще раз, все работает!