User Tools

Site Tools


script_animation_flip

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
script_animation_flip [2014/05/19 08:50]
lm13 [How to use the script]
script_animation_flip [2014/09/24 16:10] (current)
lm13 [About the script]
Line 1: Line 1:
 ====== About the script ====== ====== About the script ======
-  * Purpose : These scripts ​will give you a beautiful page transition animation and an optional horizontal & vertical page loop+  * Purpose : This script ​will give you a beautiful page transition animation and an optional horizontal & vertical page loop
   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]
-  * Current Version : 2.0+  * Current Version : 3.1
   * Link: https://​plus.google.com/​115366157037831519359/​posts/​EAUStJNGa5o   * Link: https://​plus.google.com/​115366157037831519359/​posts/​EAUStJNGa5o
 +  * Video : https://​plus.google.com/​115366157037831519359/​posts/​9eUTw8cCCpi
 +  * Download avialable! (Check repository)
  
 ====== Changelog ====== ​ ====== Changelog ====== ​
   * Version 1.0 (30/​4/​2014):​ initial release in wiki   * Version 1.0 (30/​4/​2014):​ initial release in wiki
   * Version 2.0 (18/​5/​2014):​ Reworked parsing structure, added vertical support, improved smoothness   * Version 2.0 (18/​5/​2014):​ Reworked parsing structure, added vertical support, improved smoothness
 +  * Version 2.1 (20/​6/​2014):​ added rotation check
 +  * Version 3.1 (21/​7/​2014):​ standalone, reworked structure
  
 ====== How to use the script ====== ====== How to use the script ======
-  * Set the main script to the positionchanged event of your container+  * Set the script to the positionchanged event of your container
   * enable infinte scrolling if you want a page loop, disable it if you don't want to loop through pages   * enable infinte scrolling if you want a page loop, disable it if you don't want to loop through pages
-  * in this container: create a shortcut to the [[script_toggle_animation|Toggle Script]] and set up toggle sripts configuration+  * in this container: create a shortcut to the script
   * one click on the shortcut will enable the animation, clicking again will disable the animation. ​   * one click on the shortcut will enable the animation, clicking again will disable the animation. ​
   * BE SURE TO DISABLE THE ANIMATION BEFORE YOU EDIT, MOVE OR ADD ITEMS!   * BE SURE TO DISABLE THE ANIMATION BEFORE YOU EDIT, MOVE OR ADD ITEMS!
  
 ====== Issues and hints ====== ​ ====== Issues and hints ====== ​
-  * this will break any other script, which uses item or container tags, and will be broken by them     +  * this will break any other script, which uses item or container tags, and will be broken by them
-  * with a lot of items it won't run smooth (for me 30+)+
   * you can improve smoothness if you create on each page a panel and put all items in it.    * you can improve smoothness if you create on each page a panel and put all items in it. 
   * don't use dual position, this will do weird stuff   * don't use dual position, this will do weird stuff
 +  * make sure all of your items have exactly one of the following rotations: 0°,​90°,​180°,​270°
  
 //please report all bugs in the g+ community// //please report all bugs in the g+ community//
  
-====== ​Main Script ====== +====== Script ====== 
-<code>//var d=LL.getEvent().getContainer(); +<sxh javascript;> 
-var d=LL.getCurrentDesktop(); +var e=LL.getEvent();​ 
-var cont= JSON.parse(d.getTag()||"​null"​);​+var d=e.getContainer(); 
 +var cont= JSON.parse(d.getTag()||"​null"​); ​ 
 +var items=d.getItems();​ 
 +var dwidth=d.getWidth();​  
 +var dheight=d.getHeight();​ 
 + 
 +if(e.getSource()!="​C_POSITION_CHANGED"​) 
 +
 + if(cont==null) cont=new Object(); 
 + var box=d.getBoundingBox();​ 
 + cont.minx=box.getLeft();​ 
 + cont.maxx=box.getRight();​ 
 + cont.miny=box.getTop();​ 
 + cont.maxy=box.getBottom();​ 
 + var minpagex=Math.floor( cont.minx/​dwidth);​  
 + var minpagey=Math.floor( cont.miny/​dheight);​ 
 + if(cont.setup!=true)  
 + {  
 + cont.pages=[];​ 
 + for(x=0;​x<​Math.ceil(cont.maxx/​dwidth)-minpagex;​x++) 
 +
 + cont.pages[x]=[];​ 
 + for(y=0;​y<​Math.ceil(cont.maxy/​dheight)-minpagey;​y++) 
 +
 + cont.pages[x][y]=[];​ 
 +
 +
 + for(x=0;​x<​items.length;​x++)  
 + {  
 + var i=items.getAt(x);​ 
 + var pinned=i.getProperties() .getString("​i.pinMode"​);​ 
 + if(pinned!="​XY"​) 
 +
 + var data=new Object(); 
 + data.posx=i.getPositionX();​ 
 + data.posy=i.getPositionY();​ 
 + data.rot=Math.abs(i.getRotation())==90;​ 
 + data.sx=data.rot?​i.getScaleX():​i.getScaleY();​ 
 + data.sy=data.rot?​i.getScaleY():​i.getScaleX();​ 
 + data.pin=pinned;​ 
 + if(i.getProperties().getBoolean("​i.onGrid"​)) data.onGrid=true;​  
 + else data.onGrid=false;​ 
 + i.getProperties().edit().setBoolean("​i.onGrid",​false).commit();​ 
 + if(pinned=="​X"​) 
 +
 + var ypages=cont.pages[Math.floor(data.posx/​dwidth)-minpagex][Math.floor(data.posy/​dheight)-minpagey];​ 
 + for(z=0;​cont.pages[z]!=null;​z++) 
 + cont.pages[z][Math.floor(data.posy/​dheight)-minpagey].push(i.getId());​ 
 +
 + else if(pinned=="​Y"​) 
 +
 + var xpages=cont.pages[Math.floor(data.posx/​dwidth)-minpagex];​ 
 + for(z=0;​z<​xpages.length;​z++) 
 + xpages[z].push(i.getId());​ 
 +
 + else cont.pages[Math.floor(data.posx/​dwidth)-minpagex][Math.floor(data.posy/​dheight)-minpagey].push(i.getId());​ 
 + i.setTag(JSON.stringify(data));​ 
 +
 + }  
 + cont.setup=true;​ 
 + Android.makeNewToast("​Animation enabled",​true).show();​ 
 + LL.writeToLogFile(JSON.stringify(cont.pages),​false);​ 
 + }  
 + else 
 + {  
 + var cellw=d.getCellWidth();​  
 + var cellh=d.getCellHeight();​ 
 + for(x=0;​x<​items.length;​x++)  
 + {  
 + var i=items.getAt(x);​  
 + var data=JSON.parse(i.getTag());​ 
 + i.setScale(1,​1);​ 
 + if(data!=null&&​ data.onGrid==true)  
 + {  
 + iwidth=i.getWidth();​ 
 + iheight=i.getHeight();​  
 + i.getProperties().edit().setBoolean("​i.onGrid",​true).commit();​  
 + i.setCell(Math.round(data.posx/​cellw),​Math.round(data.posy/​cellh),​Math.round((data.posx+iwidth)/​cellw),​Math.round(( data.posy+iheight)/​cellh));​  
 + }   
 + }  
 + cont.setup=false;​ 
 + Android.makeNewToast("​Animation disabled",​true).show();​  
 + }  
 + d.setTag(JSON.stringify(cont));​ 
 +
 + 
 if(cont==null || !cont.setup || d.getPositionScale()!=1)return;​ if(cont==null || !cont.setup || d.getPositionScale()!=1)return;​
-var dwidth=d.getWidth();​ 
-var dheight=d.getHeight();​ 
 var dposx=d.getPositionX();​ var dposx=d.getPositionX();​
 var dposy=d.getPositionY();​ var dposy=d.getPositionY();​
Line 39: Line 127:
 var pageposy=currenty*dheight;​ var pageposy=currenty*dheight;​
 var percenty=(dposy-pageposy)/​dheight;​ var percenty=(dposy-pageposy)/​dheight;​
-var items=d.getItems();​ 
-var l=items.getLength();​ 
 var maxpagex=Math.floor( (cont.maxx-dwidth)/​dwidth);​ var maxpagex=Math.floor( (cont.maxx-dwidth)/​dwidth);​
 var maxpagey=Math.floor( (cont.maxy-dheight)/​dheight);​ var maxpagey=Math.floor( (cont.maxy-dheight)/​dheight);​
 +var minpagex=Math.floor( cont.minx/​dwidth); ​
 +var minpagey=Math.floor( cont.miny/​dheight);​
  
 if(((percentx>​0.005 && percentx<​99.995) ||(percenty>​0.005 && percenty<​99.995)) && dposx>​cont.minx-dwidth && dposy>​cont.miny-dheight) if(((percentx>​0.005 && percentx<​99.995) ||(percenty>​0.005 && percenty<​99.995)) && dposx>​cont.minx-dwidth && dposy>​cont.miny-dheight)
 { {
- var scrollLimit=d.getProperties() .getBoolean("​noScrollLimit"​);​ + var scrollLimit=d.getProperties() .getBoolean("​noScrollLimit"​);​ 
-if(dposx>​cont.maxx-dwidth&&​scrollLimit){ + if(dposx>​cont.maxx-dwidth&&​scrollLimit){ 
-d.setPosition(cont.minx-dwidth,​dposy,​1,​false);​ + d.setPosition(cont.minx-dwidth,​dposy,​1,​false);​ 
-+
-else if(dposy>​cont.maxy-dheight&&​scrollLimit) d.setPosition(dposx,​cont.miny-dheight,​1,​false);​ + else if(dposy>​cont.maxy-dheight&&​scrollLimit) d.setPosition(dposx,​cont.miny-dheight,​1,​false);​ 
-if(dposx<​cont.minx&&​scrollLimit) + if(dposx<​cont.minx&&​scrollLimit) 
-cont.statex=true;​ + cont.statex=true;​ 
-if(dposy<​cont.miny&&​scrollLimit) + if(dposy<​cont.miny&&​scrollLimit) 
-cont.statey=true;​ + cont.statey=true;​ 
-for(i=0;i<l;i++) +  
-+ var items0=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey];​ 
-item=items.getAt(i); + if(items0!=null) 
-var pinned=item.getProperties() .getString("​i.pinMode"​); +
-var data=JSON.parse(item.getTag());​ + for(z=0;z<items0.length;z++) 
-var newposx=data.posx; +
-var newposy=data.posy; + var item=LL.getItemById(items0[z]); 
-var newscalex=1;​ + var data=JSON.parse(item.getTag());​ 
-var newscaley=1;​ + item.setScale(((data.pin=="X"||percentx>​=0.5||percenty>​=0.5)?1:data.rot?​1-percenty*2:​1-percentx*2)*data.sx, ((data.pin=="​Y"​||percentx>=0.5||percenty>​=0.5)?1:1-(data.rot?percentx:percenty)*2)*data.sy)
-var newvis=true;​ + item.setPosition(data.pin=="​X"?​data.posx:​dposx+((data.posx%dwidth+dwidth)%dwidth)+percentx*(dwidth- ((data.posx%dwidth+dwidth)%dwidth)*2),​data.pin=="​Y"?​data.posy:​dposy+((data.posy%dheight+dheight)%dheight)+percenty*(dheight- ((data.posy%dheight+dheight)%dheight)*2)); 
-if(pinned=="NONE"​|| ​pinned=="​Y"​) + item.setVisibility((percentx<​0.5||data.pin=="​X"​)&&​(percenty<​0.5||data.pin=="​Y"​))
-+
-if(Math.floor(data.posx/dwidth)==currentx || (cont.statex && Math.floor(data.posx/​dwidth)==maxpagex)) +
-+ var items=(cont.pages[currentx+1-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey];​ 
-if(percentx<0.5+ if(items!=null) 
-+
-newscalex=1-percentx*2;​ + for(z=0;​z<​items.length;​z++) 
-newposx=dposx+((data.posx%dwidth+dwidth)%dwidth)+percentx*(dwidth- ((data.posx%dwidth+dwidth)%dwidth) *2); +
-+ if(items0==null||items0.indexOf(items[z])==-1) 
-else newvis=false+
-+ var item=LL.getItemById(items[z]);​ 
-if(Math.floor(data.posx/dwidth) ==currentx+1+ var data=JSON.parse(item.getTag());​ 
-+ item.setScale((data.pin=="​X"​||percentx<​0.5||percenty>=0.5?​1:​data.rot?​1-percenty*2:​percentx>​0.005?​percentx*2-1:​1)*data.sx,​(data.pin=="​Y"​||percentx<​0.5||percenty>​=0.5?​1:​data.rot?​(percentx>​0.005?​percentx*2-1:​1):​1-percenty*2)*data.sy)
-if(percentx>​=0.5) + item.setPosition(data.pin=="​X"?​data.posx:​dposx+dwidth/​2*(2-percentx*2)+ ((data.posx%dwidth+dwidth)%dwidth)*(percentx*2-1),data.pin=="​Y"?​data.posy:​dposy+((data.posy%dheight+dheight)%dheight)+percenty*(dheight- ((data.posy%dheight+dheight)%dheight)*2))
-+ item.setVisibility((percentx>​=0.5||data.pin=="X")&&​(percenty<​0.5||data.pin=="Y")); 
-newscalex=percentx*2-1;​ + } 
-newposx=dposx+dwidth/​2*(2-percentx*2)+ ((data.posx%dwidth+dwidth)%dwidth) *(percentx*2-1)+
-+
-else newvis=false+ var items=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[currenty+1-minpagey];​ 
-+ if(items!=null) 
-+
-if(pinned=="NONE"​|| ​pinned=="X") + for(z=0;​z<​items.length;​z++) 
-{ +
-if(Math.floor(data.posy/​dheight)==currenty ​|| (cont.statey && Math.floor(data.posy/​dheight)==maxpagey)+ if(items0==null||items0.indexOf(items[z])==-1
-+
-if(percenty<​0.5) + var item=LL.getItemById(items[z]);​ 
-+ var data=JSON.parse(item.getTag());​ 
-newscaley=1-percenty*2;​ + item.setScale((data.pin=="​X"​||percentx>​=0.5||percenty<​0.5?​1:​data.rot?​(percenty>​0.005?​percenty*2-1:​1):​1-percentx*2)*data.sx,​(data.pin=="​Y"​|| percentx>​=0.5||percenty<​0.5?​1:​data.rot?​1-percentx*2:​percenty>​0.005?​percenty*2-1:​1)*data.sy)
-newposy=dposy+((data.posy%dheight+dheight)%dheight)+percenty*(dheight- ((data.posy%dheight+dheight)%dheight) *2)+ item.setPosition(data.pin=="​X"?​data.posx:​dposx+((data.posx%dwidth+dwidth)%dwidth)+percentx*(dwidth- ((data.posx%dwidth+dwidth)%dwidth)*2),data.pin=="​Y"?​data.posy:dposy+dheight/​2*(2-percenty*2)+ ((data.posy%dheight+dheight)%dheight)*(percenty*2-1));​ 
-+ item.setVisibility((percentx<​0.5||data.pin=="​X"​)&&​(percenty>​=0.5||data.pin=="​Y"​)); 
-else newvis=false;​ +
-+ } 
-if(Math.floor(data.posy/​dheight) ​==currenty+1) + }
-+
-if(percenty>​=0.5) +
-+
-newscaley=percenty*2-1;​ +
-newposy=dposy+dheight/​2*(2-percenty*2)+ ((data.posy%dheight+dheight)%dheight) *(percenty*2-1)+
-+
-else newvis=false;​ +
-+
-} item.setScale(newscalex,​newscaley); +
-item.setPosition(newposx,​newposy);​ +
-item.setVisibility(newvis); +
-}+
 } }
 else else
 { {
-d.setPosition(dposx,​dposy);​ + d.setPosition(dposx,​dposy);​ 
-d.setPosition(dposx<​cont.minx?​cont.maxx-dwidth:​dposx,​dposy<​cont.miny?​cont.maxy-dheight:​dposy,​1,​false);​ + d.setPosition(dposx<​cont.minx?​cont.maxx-dwidth:​dposx,​dposy<​cont.miny?​cont.maxy-dheight:​dposy,​1,​false);​ 
-cont.statex=false;​ + cont.statex=false;​ 
-cont.statey=false;​ + cont.statey=false;​ 
-for(i=0;​i<​l;i++) + for(i=0;​i<​items.length;i++) 
-+
-item=items.getAt(i);​ + item=items.getAt(i);​ 
-var data=JSON.parse(item.getTag());​ + var data=JSON.parse(item.getTag());​ 
-item.setScale(1,1); + item.setScale(data.sx,data.sy); 
-item.setPosition(data.posx,data.posy); + item.setPosition(data.posx,​data.posy);​ 
-item.setVisibility(true); + item.setVisibility(true);​ 
-+ }
-+
-</​code>​ +
- +
-====== Toggle Script code ====== +
-<​code>//​config +
-var mainScriptsName= "​AnimationFlip";​ +
-//​endconfig +
- +
- +
-var d=LL.getEvent().getContainer();​ +
-var box=d.getBoundingBox();​ +
-var cont=JSON.parse(d.getTag()||"​null"​);​ +
-if(cont==null) cont=new Object(); +
-cont.minx=box.getLeft();​ +
-cont.maxx=box.getRight();​ +
-cont.miny=box.getTop();​ +
-cont.maxy=box.getBottom();​ +
-var items=d.getItems();​ +
-LL.runScript(mainScriptsName,​null);​ +
-var dwidth=d.getWidth();​ +
-var dheight=d.getHeight();​ +
-if(cont.setup!=true) +
-+
-for(x=0;​x<​items.length;​x++) +
-+
-var i=items.getAt(x);​ +
-var data=new Object(); +
-data.posx=i.getPositionX();​ +
-data.posy=i.getPositionY();​ +
-if(i.getProperties().getBoolean("​i.onGrid"​)) data.onGrid=true;​ +
-else data.onGrid=false;​ +
-i.getProperties().edit().setBoolean("​i.onGrid"​,false).commit();​ +
-i.setTag(JSON.stringify(data));​ +
-+
-cont.setup=true;​ +
-Android.makeNewToast("​Animation enabled",​true).show();​ +
-+
-else +
-+
-var cellw=d.getCellWidth();​ +
-var cellh=d.getCellHeight();​ +
-for(x=0;​x<​items.length;​x++) +
-+
-var i=items.getAt(x);​ +
-var data=JSON.parse(i.getTag());​ +
-if(data!=null && data.onGrid==true) +
-+
-i.getProperties().edit().setBoolean("​i.onGrid",​true).commit();​ +
-i.setCell(Math.round(data.posx/​cellw),​Math.round(data.posy/​cellh),​Math.round((data.posx+i.getWidth())/​cellw),​Math.round(( data.posy+i.getHeight())/​cellh)); +
-+
-i.setVisibility(true);​ +
-} +
-cont.setup=false;​ +
-Android.makeNewToast("​Animation disabled",​true).show();​+
 } }
-d.setTag(JSON.stringify(cont));​ +</sxh>
-</code>+
script_animation_flip.1400489442.txt.gz · Last modified: 2014/05/19 08:50 by lm13