//this code is written by Macc 2004.01.31
//abel@iparigrafika.hu
//
//original idea by Mario Klingemann from
www.quasimondo.com/
//
//use it if you want, but a small credit would be nice:)
//fscommand("allowscale", "false");
pw = 250; //page width
ph = 350; //page height
page=-2; //first page (normally it is 0 = the page before the cover = blank page)
maxpage=8; //last page (back cover, should be even number)
resetPages();
reset();
flip = false;
flipOff = false;
flipOK = false;
sx = sy = 0; //nincs kiindulopont
mx = eval("pages._xmouse");
my = eval("pages._ymouse");
function reset() { //a lapok inicializalasa
for(i=0;i<4;i++) setPage(i,pw,ph);
pages.pgrad._visible = pages.mask._visible = pages.flip._visible = false;
pages.flip.p3mask._width = pages.pgmask._width = pw*2;
pages.flip.p3mask._height = pages.pgmask._height = ph;
pages.flip.fmask.page.pf._width = pw;
pages.flip.fmask.page.pf._height = ph;
}
function setPage(i,w,h) { //lapmeret beallitasa!! (reset resze)
var item = eval("pages.p"+(i+1));
if(i==1 || i==2) item = eval("pages.flip.p"+(i+1));
//item.page.pf._width = w;
//item.page.pf._height = h;
item.page._x = -w;
item._x = ((i%2)==0)? 0: w; //kezdeti pozicio lapmeret alapjan!
}
mousecontroll = new Object();
mousecontroll.onMouseDown = function() {
//trace("press");
if(flipOff) {
flipOff = false;
flip = true;
} else {
var hit = hittest(); //hittest
if(hit) {
anim._visible = false;
flip = true;
flipOff = false;
ox = sx = hit*pw;
pages.flip.setMask(pages.mask);
//_quality = "MEDIUM";
}
}
//ha talalat-> select new dragpoint!, & OEF enabled
}
mousecontroll.onMouseUp = function() {
//trace("release");
if(flip) {
flipOK = false;
if(sx<0 && pages._xmouse>0) flipOK = true;
if(sx>0 && pages._xmouse<0) flipOK = true;
trace(flipOK);
flipOff = true;
flip = false;
}
//if dragged, release it!
}
Mouse.addListener(mousecontroll);
function hittest() { //klikkelesnel a talalat vizsgalati i/n, es ha igen elore v. hatra!?
var x=pages._xmouse;
var y=pages._ymouse;
var pmh = ph/2;
//trace(x+","+y);
if(y<=pmh && y>=-pmh && x<=pw && x>=-pw) { //ha a megadott intervallumban klikkelunk, akkor lapozhatunk
//trace("hit!!!");
//oy = sy = y; //a startpont magassaga bonyolultab lesz majd!!!
var r = Math.sqrt(x*x+y*y);
var a = Math.asin(y/r);
var y = Math.tan(a)*pw;
if(y>0 && y>ph/2) y = ph/2;
if(y<0 && y<-ph/2) y = - ph/2;
oy = sy = y;
// test korok beallitasa
r0 = Math.sqrt((sy+ph/2)*(sy+ph/2)+pw*pw);
r1 = Math.sqrt((ph/2-sy)*(ph/2-sy)+pw*pw);
pageN = eval("pages.flip.p2.page");
pageO = eval("pages.flip.p3");
offs = -pw;
pages.flip.fmask._x = pw;
if(x<0 && page>0) {
//trace(">----->"); //lapozas visszafele
pages.flip.p3._x = 0;
setPages(page-2,page-1,page,page+1);
return -1;
}
if(x>0 && page<maxpage) {
//trace("<-----<"); //lapozas elore
pages.flip.p3._x = pw;
setPages(page,page+2,page+1,page+3);
return 1;
}
} else return 0; //nem a lap felett klikkeltunk!
}
onEnterFrame = function () {
var x=pages._xmouse;
var y=pages._ymouse;
if(flip) {
x = (ox += (x-ox)/5);
y = (oy += (y-oy)/5);
calc(x,y);
}
if(flipOff) {
if(flipOK) {
x = (ox += (-sx-ox)/3);
y = (oy += (sy-oy)/3);
calc(x,y);
if(x/-sx > 0.99) {
flip = false;
flipOK = flipOff = false;
pages.pgrad._visible = pages.flip._visible = false;
//_quality = "HIGH";
page += (sx<0)? -2: 2; //lapozas
setPages(page,0,0,page+1);
}
} else {
x = (ox += (sx-ox)/3);
y = (oy += (sy-oy)/3);
calc(x,y);
if(x/sx > 0.99) {
flip = false;
flipOff = false;
pages.pgrad._visible = pages.flip._visible = false;
//_quality = "HIGH";
setPages(page,0,0,page+1);
}
}
}
}
function calc(x,y) {
var rr0 = Math.sqrt((y+ph/2)*(y+ph/2)+x*x);
var rr1 = Math.sqrt((ph/2-y)*(ph/2-y)+x*x);
if(rr0>r0 || rr1>r1) { // ha tepes lenne...
// ujraszamolni!
if(y<sy) { // k1-gyel kell osszehasonlitani!
var a = Math.asin((ph/2-y)/rr1);
y = (ph/2-Math.sin(a)*r1);
x = (x<0)? -Math.cos(a)*r1: Math.cos(a)*r1;
if(y>sy) {
if((sx*x)>0) y = sy, x = sx;
else y = sy, x = -sx;
}
} else { // k0-val kell osszehasonlitani!
var a = Math.asin((y+ph/2)/rr0);
y = Math.sin(a)*r0-ph/2;
x = (x<0)? -Math.cos(a)*r0: Math.cos(a)*r0;
if(y<sy) {
if((sx*x)>0) y = sy, x = sx;
else y = sy, x = -sx;
}
}
}
if((sx<0 && (x-sx)<10) || (sx>0 && (sx-x)<10)) {
if(sx<0) x = -pw+10;
if(sx>0) x = pw-10;
}
//a lapozas kiszamitasa
pages.pgrad._visible = pages.flip._visible = true;
//az egyenes egyenlete: (koordinata geometriai szamitasok);
var vx = x-sx;
var vy = y-sy;
var a1 = vy/vx;
var a2 = -vy/vx;
//kozeppont
cx = sx+(vx/2);
cy = sy+(vy/2);
//gd.moveTo(cx,cy);
//gd.lineTo(a2*-300+cx,-300+cy);
//gd.moveTo(a2*-300+cx,-300+cy);
//gd.lineTo(a2*+300+cx,300+cy);
//trigonometriai szamitasok
//a lap, es a maskok elforgatasi szoge!
var r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
var a = Math.asin((sy-y)/r);
if(sx<0) a = -a;
ad = a*(180/Math.PI); //fokban is kifelyezve
pageN._rotation = ad*2;
r = Math.sqrt((sx-x)*(sx-x)+(sy-y)*(sy-y));
rl = (pw*2);
if(sx>0) { //elore lapozas!
pages.mask._xscale = 100;
nx = cx-Math.tan(a)*(ph/2-cy);
ny = ph/2;
if(nx>pw) {
nx = pw;
ny = cy+Math.tan(Math.PI/2+a)*(pw-cx);
}
pageN.pf._x = -(pw-nx);
pages.flip.fgrad._xscale = (r/rl/2)*pw;
pages.pgrad._xscale = -(r/rl/2)*pw;
pages.flip.p3shadow._xscale = (r/rl/2)*pw;
} else { //hatra lapozas!
pages.mask._xscale = -100;
nx = cx-Math.tan(a)*(ph/2-cy);
ny = ph/2;
if(nx<-pw) {
nx = -pw;
ny = cy+Math.tan(Math.PI/2+a)*(-pw-cx);
}
pageN.pf._x = -(pw-(pw+nx));
pages.flip.fgrad._xscale = -(r/rl/2)*pw;
pages.pgrad._xscale = (r/rl/2)*pw;
pages.flip.p3shadow._xscale = -(r/rl/2)*pw;
}
pages.mask._x = cx;
pages.mask._y = cy;
pages.mask._rotation = ad;
pageN.pf._y = -ny;
pageN._x = nx+offs;
pageN._y = ny;
pages.flip.fgrad._x = cx;
pages.flip.fgrad._y = cy;
pages.flip.fgrad._rotation = ad;
pages.flip.fgrad._alpha = (r>(rl-50))? 100-(r-(rl-50))*2: 100;
pages.flip.p3shadow._x = cx;
pages.flip.p3shadow._y = cy;
pages.flip.p3shadow._rotation = ad;
pages.flip.p3shadow._alpha = (r>(rl-50))? 100-(r-(rl-50))*2: 100;
pages.pgrad._x = cx;
pages.pgrad._y = cy;
pages.pgrad._rotation = ad+180;
pages.pgrad._alpha = (r>(rl-100))? 100-(r-(rl-100)): 100;
pages.flip.fmask.page._x = pageN._x;
pages.flip.fmask.page._y = pageN._y;
pages.flip.fmask.page.pf._x = pageN.pf._x;
pages.flip.fmask.page.pf._y = pageN.pf._y;
pages.flip.fmask.page._rotation = pageN._rotation;
}
function setPages(p1,p2,p3,p4) {
if(p1<0) p1=0;
if(p2<0) p2=0;
if(p3<0) p3=0;
if(p4<0) p4=0;
trace("setpages ->"+p1+","+p2+","+p3+","+p4);
pages.p1.page.pf.ph.attachMovie("page"+p1,"pic",0);
pages.p1.page.pf.ph._y = -ph/2;
pages.flip.p2.page.pf.ph.attachMovie("page"+p2,"pic",0);
pages.flip.p2.page.pf.ph._y = -ph/2;
pages.flip.p3.page.pf.ph.attachMovie("page"+p3,"pic",0);
pages.flip.p3.page.pf.ph._y = -ph/2;
pages.p4.page.pf.ph.attachMovie("page"+p4,"pic",0);
pages.p4.page.pf.ph._y = -ph/2;
/*
pages.p1.page.pf.ph._alpha = 99.9;
pages.flip.p2.page.pf.ph._alpha = 99.9;
pages.flip.p3.page.pf.ph._alpha = 99.9;
pages.p4.page.pf.ph._alpha = 99.9;
*/
}
function resetPages() {
setPages(page,0,0,page+1);
}
/*
you have this book with 8 pages:
first page is 1 (always at the right side (odd number))
last page is 8 (always must be at the left side (even number))
page0 is the page before the first page: must be a blank background
colored or empty movieClip
page9 (in the original case) is the page after the last page!!! and
works like page0!
if you incrase the number of pages to 18 (example):
page9 must be renamed page19 (maxPages+1) and don't forget it's export
name also must change to page19!
all pages you insert must named starting by "page", and followed by
the page number (9,10,11,12,13,14,15,16,17,18)...
and also must be exported with the same name!
One more thing:
Because this swf has a self loader routine, don't export item in the
first frame!!! don't check this option when exporting!
but place an instance of newly created pages on frame 2, where the others
are placed!!!
*/
Flash 动画: