Avatar billede skooter Nybegynder
22. august 2007 - 09:24 Der er 2 kommentarer og
1 løsning

Centering ved scroll zoom

Jeg har lavet et galleri hvor man kan klikke på en række små billeder som så vises i stor. Når det store billede vises kan man zoom'e med scroll-hjulet. Problemet er at når man zoom'er vil jeg gerne have at det sker i forhold til musens X-Y koordinater. Lige nu forstørres billedet blot i forhold til dens eget nul-punkt. Jeg har prøvet 2 ting (og en masse andet):

1)
picture._x = _root._xmouse - picture._xmouse;
picture._y = _root._xmouse - picture._xmouse;


2)
pt = {x:_root.picture._xmouse, y:_root.picture._ymouse};
var pt2 = {x:pt.x, y:pt.y};
_root.picture.localToGlobal(pt2);
_root.picture._x = (pt2.x-pt.x);
_root.picture._y = (pt2.y-pt.y);


Ingen af dem virker. Det er jo "simpel" matematik, men hvad gør jeg forkert?
Avatar billede skooter Nybegynder
22. august 2007 - 11:35 #1
Her er hele scroll-funktionen...



mouseListener = new Object();
mouseListener.onMouseWheel = function (delta) {
   
    if (large_frame.hitTest(_xmouse, _ymouse)) {
        if ((picture._xscale < 100 and delta > 0) or (picture._xscale >= 10 and delta < 0)) {
            picture._xscale += delta;
            picture._yscale += delta;
           
            picture._x = _root._xmouse - picture._xmouse; // virker ikke
            picture._y = _root._ymouse - picture._ymouse; // virker ikke

            prc.text = Math.round(picture._xscale) + "%";
        }
    }
}
Avatar billede skooter Nybegynder
23. august 2007 - 13:37 #2
Jeg tænkte at skaleringen påvirkede musens position på billedet så jeg prøvede med ...

picture._x = _root._xmouse - ((picture._xmouse*picture._xscale)/100);
picture._y = _root._ymouse - ((picture._xmouse*picture._yscale)/100);

... Det er tætter på, men stadig kun semi.
Avatar billede skooter Nybegynder
28. august 2007 - 13:15 #3
Så fik jeg endelig løst problemet...


var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta) {
   
    if (large_frame.hitTest(_xmouse, _ymouse)) {
        if ((picture._xscale < 100 and delta > 0) or (picture._xscale >= 10 and delta < 0)) {
           
            var picMouseXratio = _root.picture._xmouse/(picture._width*100/_root.picture._xscale);
            var picMouseYratio = _root.picture._ymouse/(picture._height*100/_root.picture._yscale);
           
            _root.picture._xscale += delta*2;
            _root.picture._yscale += delta*2;
           
            _root.picture._x = _root._xmouse-(_root.picture._width*picMouseXratio);
            _root.picture._y = _root._ymouse-(_root.picture._height*picMouseYratio);
        }
    }
};

Mouse.addListener(mouseListener);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester