script_animation_inandout

====== 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_inandout [2014/06/03 12:02]
lm13 [About the script]
script_animation_inandout [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 : 1.0+  * Current Version : 2.0
   * Link (with Video) : https://​plus.google.com/​115366157037831519359/​posts/​NLnDw9QbC9a   * Link (with Video) : https://​plus.google.com/​115366157037831519359/​posts/​NLnDw9QbC9a
 +  * Download avialable! (Check repository)
  
 ====== Changelog ====== ====== Changelog ======
   * Version 1.0 (24/​5/​2014):​ initial release in wiki   * Version 1.0 (24/​5/​2014):​ initial release in wiki
 +  * Version 2.0 (24/​7/​2014):​ standalone, reworked structure, fix for pre-scaled items
  
 ====== 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 ======
 +  * 1-Direction pinned items are not supported
  
 //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 ​e=LL.getEvent()
-var cont= JSON.parse(d.getTag()||"​null"​);​ +var d=e.getContainer();​ 
-if(cont==null || !cont.setup || d.getPositionScale()!=1)return;+var cont=JSON.parse(d.getTag()||"​null"​);​ 
 +var items=d.getItems();
 var dwidth=d.getWidth();​ var dwidth=d.getWidth();​
 var dheight=d.getHeight();​ 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=="​NONE"​)
 + {
 + 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();​
 + if(i.getProperties().getBoolean("​i.onGrid"​))data.onGrid=true;​
 + else data.onGrid=false;​
 + i.getProperties().edit().setBoolean("​i.onGrid",​false).commit();​
 + 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;​
 var dposx=d.getPositionX();​ var dposx=d.getPositionX();​
 var dposy=d.getPositionY();​ var dposy=d.getPositionY();​
Line 31: Line 107:
 var pageposy=currenty*dheight;​ var pageposy=currenty*dheight;​
 var percenty=(dposy-pageposy)/​dheight;​ var percenty=(dposy-pageposy)/​dheight;​
-var items=d.getItems(); +var maxpagex=Math.floor((cont.maxx-dwidth)/​dwidth); 
-var l=items.getLength(); +var maxpagey=Math.floor((cont.maxy-dheight)/​dheight); 
-var maxpagex=Math.floor(cont.maxx-dwidth)/dwidth); +var minpagex=Math.floor(cont.minx/dwidth); 
-var maxpagey=Math.floor(cont.maxy-dheight)/​dheight);​ +var minpagey=Math.floor(cont.miny/​dheight);​ 
-var percent+var percent=(Math.abs(0.5-percentx)<​Math.abs(0.5-percenty))?percentx:percenty
-if(Math.abs(0.5-percentx)<​Math.abs(0.5-percenty)) + 
-percent=percentx; +if(percent>​0.005&&​percent<​99.995&&​dposx>​cont.minx-dwidth&&​dposy>​cont.miny-dheight)
-else percent=percenty;​ +
-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++) + 
-+ if(percentx==percent) 
-item=items.getAt(i); +
-var pinned=item.getProperties() .getString("​i.pinMode"​); + var items0=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey];​ 
-var data=JSON.parse(item.getTag());​ + if(items0!=null) 
-var newposx=data.posx; +
-var newposy=data.posy;​ + for(z=0;z<items0.length;z++) 
-var newscalex=1;​ +
-var newscaley=1;​ + var ​item=LL.getItemById(items0[z]); 
-var newvis=true;​ + var data=JSON.parse(item.getTag());​ 
-if((pinned=="​NONE"​|| pinned=="​Y"​)&&​percentx==percent+ item.setScale((1-percent*0.75)*data.sx,(1-percent*0.75)*data.sy)
-+ item.setPosition(pageposx+((data.posx%dwidth+dwidth)%dwidth)+(dwidth-((data.posx%dwidth+dwidth)%dwidth))*percent*0.75,data.posy+(dheight-((data.posy%dheight+dheight)%dheight)*2)*percent*0.325); 
-if(Math.floor(data.posx/​dwidth)==currentx || (cont.statex && Math.floor(data.posx/​dwidth)==maxpagex)) +
-+
-newscalex=1-percent*0.75;​ + var items=(cont.pages[currentx+1-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey];​ 
-newposx=pageposx+((data.posx%dwidth+dwidth)%dwidth)+(dwidth-((data.posx%dwidth+dwidth)%dwidth))*(1-newscalex);​ + if(items!=null) 
-if(Math.floor(data.posy/​dheight)==currenty){ +
-newscaley=1-percent*0.75+ for(z=0;​z<​items.length;​z++) 
-newposy=data.posy+(dheight-((data.posy%dheight+dheight)%dheight)*2)*(1-newscaley)/2; } +
-+ var item=LL.getItemById(items[z]);​ 
-if(Math.floor(data.posx/dwidth) ==currentx+1+ var data=JSON.parse(item.getTag());​ 
-+ item.setScale((percent*0.75+0.25)*data.sx,​(percent*0.75+0.25)*data.sy)
-newscalex=percent*0.75+0.25;​ + item.setPosition(pageposx+dwidth+((data.posx%dwidth+dwidth)%dwidth)*(percent*0.75+0.25),data.posy+(dheight-((data.posy%dheight+dheight)%dheight)*2)*(0.325-percent*0.325)); 
-newposx=pageposx+dwidth+((data.posx%dwidth+dwidth)%dwidth)*newscalex;​ +
-if(Math.floor(data.posy/​dheight)==currenty){ +
-newscaley=percent*0.75+0.25+ } 
-newposy=data.posy+(dheight-((data.posy%dheight+dheight)%dheight)*2)*(1-newscaley)/2; } + else 
-+
-if((pinned=="​NONE"​|| pinned=="​X"​)&&​percenty==percent) + var items0=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[(cont.statey?​maxpagey:​currenty)-minpagey];​ 
-+ if(items0!=null
-if(Math.floor(data.posy/​dheight)==currenty||(cont.statey ​&& Math.floor(data.posy/​dheight)==maxpagey)+
-+ for(z=0;​z<​items0.length;z++) 
-newscaley=1-percent*0.75+
-newposy=pageposy+((data.posy%dheight+dheight)%dheight)+(dheight-((data.posy%dheight+dheight)%dheight))*(1-newscaley); + var item=LL.getItemById(items0[z]);​ 
-if(Math.floor(data.posx/​dwidth)==currentx){ + var ​data=JSON.parse(item.getTag()); 
-newscalex=1-percent*0.75;​ + item.setScale((1-percent*0.75)*data.sx,(1-percent*0.75)*data.sy)
-newposx=data.posx+(dwidth-((data.posx%dwidth+dwidth)%dwidth)*2)*(1-newscalex)/2; } + item.setPosition(data.posx+(dwidth-((data.posx%dwidth+dwidth)%dwidth)*2)*(percent*0.325),pageposy+((data.posy%dheight+dheight)%dheight)+(dheight-((data.posy%dheight+dheight)%dheight))*(percent*0.75))
-+
-if(Math.floor(data.posy/dheight) ==currenty+1) +
-+ var items=(cont.pages[(cont.statex?​maxpagex:​currentx)-minpagex]||[])[currenty+1-minpagey];​ 
-newscaley=percent*0.75+0.25;​ + if(items!=null) 
-newposy=pageposy+dheight+((data.posy%dheight+dheight)%dheight)*newscaley+
-if(Math.floor(data.posx/dwidth)==currentx){ + for(z=0;​z<​items.length;​z++) 
-newscalex=percent*0.75+0.25;​ +
-newposx=data.posx+(dwidth-((data.posx%dwidth+dwidth)%dwidth)*2)*(1-newscalex)/​2;​ } + var item=LL.getItemById(items[z]);​ 
-+ var data=JSON.parse(item.getTag());​ 
-} item.setScale(newscalex,​newscaley)+ item.setScale((percent*0.75+0.25)*data.sx,​(percent*0.75+0.25)*data.sy)
-item.setPosition(newposx,​newposy); + item.setPosition(data.posx+(dwidth-((data.posx%dwidth+dwidth)%dwidth)*2)*(0.325-percent*0.325),​pageposy+dheight+((data.posy%dheight+dheight)%dheight)*(0.75*percent+0.25)); 
-}+
 + } 
 + }
 } }
 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); + if(data!=null) 
-item.setPosition(data.posx,​data.posy);​ +
-item.setVisibility(true);​+ item.setScale(data.sx,data.sy); 
 + item.setPosition(data.posx,​data.posy);​ 
 + item.setVisibility(true);​ 
 +
 + }
 } }
-+</sxh>
-</code> +
script_animation_inandout.1401796924.txt.gz · Last modified: 2014/06/03 12:02 by lm13