![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Я тут на форуме много тем поэтому поводу делал, но никто не знал как такое сделать. Я имею ввиду в ScrollPane. Я сделал сам. Если кому интересно, вот код:
myScrollPane.content._xscale = 100;
myScrollPane.content._yscale = 100;
var Const_Koef = 2;
var koef = 1;
var siz = 100;
var PicCentX = myScrollPane.width/2;
var PicCentY = myScrollPane.height/2;
var TmpScrollh = 0;
var TmpScrollv = 0;
var MousePosX = 0;
var MousePosY = 0;
var ContW = myScrollPane.content.width;
var ContH = myScrollPane.content.height;
myScrollPane.vPosition = 0;
myScrollPane.hPosition = 0;
but_inc.onRelease = function() {
koef = Const_Koef;
};
but_dec.onRelease = function() {
koef = 1/Const_Koef;
};
but_res.onRelease = function() {
koef = 1;
};
Delta = function () {
dx = MousePosX+TmpScrollh;
dy = MousePosY+TmpScrollv;
ShP = dx/ContW;
SvP = dy/ContH;
if (ShP<0) {
ShP = 0;
}
if (SvP<0) {
SvP = 0;
}
ShP = ShP*myScrollPane.content.width-PicCentX;
SvP = SvP*myScrollPane.content.height-PicCentY;
myScrollPane.onComplete();
if (ShP>myScrollPane.maxHPosition) {
ShP = myScrollPane.maxHPosition;
}
if (SvP>myScrollPane.maxVPosition) {
SvP = myScrollPane.maxVPosition;
}
myScrollPane.hPosition = ShP;
myScrollPane.vPosition = SvP;
};
_root.myScrollPane.spContentHolder.onRelease = function() {
repaint();
};
function repaint() {
if (!((siz == 100 and koef == 0.5) or (siz >> 2000))) {
siz *= koef;
}
TmpScrollh = myScrollPane.hPosition;
TmpScrollv = myScrollPane.vPosition;
MousePosX = myScrollPane._xmouse;
MousePosY = myScrollPane._ymouse;
ContW = myScrollPane.content.width;
ContH = myScrollPane.content.height;
myScrollPane.refreshPane();
myScrollPane.content._xscale = siz;
myScrollPane.content._yscale = siz;
Delta();
myScrollPane.spContentHolder.onRelease = function() {
repaint();
};
}
|
|
|||||
|
Регистрация: Oct 2005
Сообщений: 28
|
Меня тоже интересует эта тема
только вот воспользоваться твоим кодом сложновато Мог бы ты немного прокомментировать свой код ?? ![]() |
|
|||||
|
Banned
[+1 16.05.2006]
[++1 16.05.2006] [+ 1 21.05.06] [++ за хамство] [+1 21.05.2006] Регистрация: Dec 2003
Сообщений: 3,925
|
Я бы оформил функцией то, что выкладываю "во всеобщее пользование". И использовал нормальные имена переменных \ методов, а не а-ля Д. Гурский
![]() |
|
|||||
|
[+1 20.07.06]
[+1 04.08.2006] |
...все это хорошо.... тока вот как замутить то же самое на колесико мыши?
если есть примеры со ScrollPane zoom MouseWheel - дайте линк плиз. в аттаче фла с картой. скроллпане. зум. 2 варианта решения... один глючит, второй не работает)))) код прокомментирован. там же описаны проблемы обоих вариантов. парюсь 2й день. туплю жутко. помогите чем можете плз. З.Ы.: пробую переделать "описанный" выше вариант... но как-то не могу воткнуть... В идеале должно работать примерно как в первом моем варианте... только там каким-то чудом в цикле пропскается нужное значение, а во втором нехватает дельты какой-то похоже... Описание работы второго варианта во флашке... плиииз хелп. Последний раз редактировалось St. Father; 15.05.2006 в 17:40. |
|
|||||
|
Регистрация: May 2006
Сообщений: 2
|
Вот вариант. работает гораздо быстрее. И главное - работает
![]() function zoomIn(z){
if(_root.mapf._width<1500){ //максимальный размер
_width+=z*(20); //приращение
_height+=z*(20);
}
}
function zoomOut(z){
if(_root.mapf._width>480){
_root.mapf._width-=z*(20);
_root.mapf._height-=z*(20);
if(_root.mapf._width<480) _root.mapf._width=480; //минимальный размер карты
if(_root.mapf._height<480) _root.mapf._height=480;
var xneed=_root.mapf._width+_root.mapf._x, //если сместилась не так как надо - поправляем.
yneed=_root.mapf._height+_root.mapf._y;
if(xneed<480) _root.mapf._x+=480-xneed;
if(yneed<480) _root.mapf._y+=480-yneed;
}
}
var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta) {
if(delta>0) zoomIn(1);
else zoomOut(1);
}
Mouse.addListener(mouseListener);
|
|
|||||
|
[+1 20.07.06]
[+1 04.08.2006] |
у меня рабочих вариантов с центрированием около 4х. и они оптимальнее предложенного. НО в них не используется контейнер с прокруткой.
Возможно, я не совсем точно суть проблемы описал... Повторю. Меня интересует зум колесиком в каком-либо контейнере (типа стандартного ScrollPane). если есть аналог СП в котором это реализовано (см. пример) && аффтару невлом дать свою компоненту - то я буду тока рад. ![]() З.Ы. Если кто-то смотрел, во втором моем варианте, похоже, неправильно составлена пропорция. Точнее, она вроде логична, но максимально возможная позиция бегунка меняется абсолютно нелогично, непропорционально ![]() А в первом, видимо, нужно позиции бегунков менять по отдельности (т.е. один если 1 +, то другой м.б. -) Последний раз редактировалось St. Father; 18.05.2006 в 16:24. |
|
|||||
|
[+1 20.07.06]
[+1 04.08.2006] |
Попробовал, значит первый вариант чутка переделать. вышло чудо... зацените... пока самый рабочий вариант)
Если есть предложения по оптимизации кода - прошу... |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 22
|
Цитата:
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:46. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|