These functions are the glue that hold it all together. They are called by the magnifying glass and the slider knob. Somebody really smart could abstract these further than I have...if you do, send me an e-mail attached with the updated version! ;-P
Here's my best practices advice...create an 'actions/functions' layer on any MC you create...especially on the _root layer.
Pre-function code
This code runs when the movie loads before the functions get called...it is still very important
// The base_mag_factor is the correlation of the small picture to the big picture...
_root.base_mag_factor = 5;
// The mag_factor will change as scaling occurs
_root.mag_factor = _root.base_mag_factor;
//Stop so that this doesn't reset willy-nilly on us
stop();
The base_mag_factor is the proportion between your thumbnail and the viewer (viewed) object under the mask. _root.mag_factor starts out baselined, but is variable with the zooming.
The Zoom Function
/*
This function scales the magnifying glass and the bigpicture
It also helps to handle the centering effect on the zoom...
Read the comments on how that happens
*/
function scale_mag (zoom_perc,mag_perc) {
// getting ready for later...to be able to center
start_width = _root.mag._width;
start_height = _root.mag._height;
//scale it all...
_root.figure._xscale = (zoom_perc);
_root.figure._yscale = (zoom_perc);
_root.mag._xscale = (mag_perc);
_root.mag._yscale = (mag_perc);
_root.mag_factor = (zoom_perc/100)*(_root.base_mag_factor);
_root.zoom_ind = zoom_perc; //updates the percentage viewer
// The other half keeps scaling in sync and centers the scaling
// Find out the width and height now
end_width = _root.mag._width;
end_height = _root.mag._height;
// Figure the difference in width and height (x and y)
x_change = start_width - end_width;
y_change = start_height - end_height;
//adjust by half the difference
_root.mag._x = _root.mag._x + x_change/2;
_root.mag._y = _root.mag._y + y_change/2;
}
You'll notice the reference to the base_mag_factor (which remains constant)...that is why it has to be defined sepaprately from the mag_factor variable (which changes with the zoom).
The Pan Function
/*
Moves the panel inside the viewing window...
It moves opposite the magnifying glass.
This function is also called when scaling occurs
*/
function move_panel () {
//trace (_root.mag_factor);
_root.figure._x = 0 -((_root.mag._x-_root.lilfigure._x)*_root.mag_factor);
_root.figure._y = 0 -((_root.mag._y-_root.lilfigure._y)*_root.mag_factor);
}
Essentially, the large window object (figure) moves opposite the thumbnail (lilfigure) with the magnification factor figured in.
You could also do a simple drag on the object...but the idea here is to keep the inside-outside perspective.