![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 204
|
Я вот думаю если привязать к маске хиттест какой-нить чтобы твой скрипт для колеса работал ТОЛЬКО когда мыш в поле маски, тогда вероятно это решит проблему на сайтах с общим скроллингом
Или так: Если X мыши больше Х маски Y мыши больше Y маски Х мыши Меньше X маски + WIDTH маски Y мыши Меньше Y маски + WIDTH маски тогда только запускать скрипт колеса По идее колесо будет скроллировать поле ТОЛЬКО тогда когда мыш наведена на скроллируемый контент Последний раз редактировалось DJ_Baton; 23.05.2008 в 08:37. |
|
|||||
|
Цитата:
Зачем хиттест! Есть у onMouseWheel второй параметр. Его и пользуем. Смотрим вариант: |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Жень Шень : Прикольно! Я, честно сказать, даже не знал)))) В хелпе про какойто стринг говорится, а делаешь параметр стрингом - ругается. Потому и не разобрался))) Спасибо!
Только я бы еще скроллер включил, а то както странно когда мышь над скроллером а колесиком не двигается))
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 23.05.2008 в 13:01. |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 204
|
заменил старый скрипт в своей флэшке на новый колесо совсем перестало работать... и что есть 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;
Последний раз редактировалось DJ_Baton; 23.05.2008 в 17:33. |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Aug 2003
Сообщений: 204
|
эм... ну подскажите чего после замены старого скрипта на ваш перестал скролл мыши работать вообще ? (( я только target_mc на txt заменил и всё
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вот поэтому и не работает. Чем Вас таргет не устроил?))))) Во всем коде таргет, а здесь Вам какой-то тхт понадобился)
По поводу target2_mc. Это ссылка на клип, находящийся под курсором. Т.е. это не какой-то конкретный физический клип, а только ссылка, подобно тому как можно написать Имя созданного клипа (Instance Name) будет ferrari_mc, но он будет доступен отсюда по короткой ссылке my_mc, даже если Вы создадите его в тридевятом королевстве и по имени ferrari_mc достучатся не сможете. Так вот здесь target2_mc - такая же ссылка, переменная, значение которой заполняет сам объект Маус и отдает ее листенеру в эвентОбжекте вместе с дельтой (смещением колесика). Интересно, можно ли построить на этом аналог хиттеста для мыши)))?
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 23.05.2008 в 20:26. |
|
|||||
|
Цитата:
Цитата:
Последний раз редактировалось Жень Шень; 23.05.2008 в 20:06. |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 204
|
Апдейт - разобрался, нашёл кривости, он скроллирует только если мыша наведена на контент а не на область скроллирования, т.е. на примере с картинкой работает только если наведено на картинку, а если область скроллирования больше то ничерта не пашет
![]() |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 204
|
та не, всё пофиксил, нашёл ряд багов...
в общем чтоб решить проблему с наведением на контент поверх всего контента кинул маску с альфой = 0... кстати попробуйте поскроллировать текст, узнаете много нового ))) или лучше даже несколько текстовых элементов маленьких проблема с передачей фокуса сайту так и не решилась, фкус тупо глушится и колесо всё равно работает только в рамках флэшки В идеале должно быть прописано чтобы скрипт работал ТОЛЬКО если курсок по X и Y в рамках маски, по другому он тупо привязывает колесо к флэшине а сам сайт стоит на месте при прокрутке колесом |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|