Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Ищу скролл с опциями (возможно за оплату) (http://www.flasher.ru/forum/showthread.php?t=111891)

darkzip 12.05.2008 04:05

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

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

Wolsh 13.05.2008 10:44

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

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

darkzip 14.05.2008 02:58

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

Wolsh 14.05.2008 12:14

Вложений: 2
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
Посмотри мой исходничек снова, у меня два вопроса:
1. трек не понимаю почему-то внизу уходит ниже кнопок (где именно это управляется?)
2. как сдеалать большее пролистывание от колесика мышки? (опять же где этот параметр?)

Wolsh 15.05.2008 13:20

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

Wolsh 16.05.2008 11:56

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

DJ_Baton 22.05.2008 22:52

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

Wolsh 23.05.2008 02:12

Вложений: 1
Реально кумарит?)))
А что, вот этот кусок никак не расслабляет?
Код:

//устанавливаем размер и координаты "окошка". Эти параметры по желанию.
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/showthre...849#post740849
думаю это будет актуально для всех кто с таким сталкивался =)

DJ_Baton 23.05.2008 06:28

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

Жень Шень 23.05.2008 12:16

Вложений: 1
Цитата:

Сообщение от DJ_Baton (Сообщение 740858)
Я вот думаю если привязать к маске хиттест какой-нить чтобы твой скрипт для колеса работал ТОЛЬКО когда мыш в поле маски, тогда вероятно это решит проблему на сайтах с общим

Привет!
Зачем хиттест! Есть у 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

Цитата:

Сообщение от Wolsh (Сообщение 740892)
Я, честно сказать, даже не знал)))) В хелпе про какойто стринг говорится, а делаешь параметр стрингом - ругается. Потому и не разобрался...

Я в свое время тоже на этом споткнулся. Но, на форуме помогли разобраться с "липовым" стрингом. Смотреть тут

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

Цитата:

Сообщение от DJ_Baton (Сообщение 741053)
эм... ну подскажите чего после замены старого скрипта на ваш перестал скролл мыши работать вообще ? (( я только 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

Вложений: 1
Цитата:

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

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

DJ_Baton 25.05.2008 04:29

Цитата:

определение области скроллирования не работало.
вот и я о том же ;)

Котяра 25.05.2008 05:01

Вложений: 1
Если интересует во вложении компонент (просто кидаешь на таймлайн - и в параметрах указываешь мувик. скины меняются код открыт.. колёсико мыши не работает, но вставить нетрудно
Вложение 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 (Сообщение 741830)
Походу скроллинг в Сафари под МакОС не работает почему-то

Это лечится.

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

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

Wolsh 28.05.2008 01:03

Вложений: 1
Цитата:

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


Часовой пояс GMT +4, время: 22:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.