job w/ duration
This commit is contained in:
parent
cc6b18f401
commit
465f68d205
62
index.html
62
index.html
@ -57,8 +57,14 @@ var Time =
|
|||||||
Jobs:[],
|
Jobs:[],
|
||||||
Stamp:false,
|
Stamp:false,
|
||||||
Queue:false,
|
Queue:false,
|
||||||
|
Loop:false,
|
||||||
Add:function(inJob)
|
Add:function(inJob)
|
||||||
{
|
{
|
||||||
|
if(Time.Loop)
|
||||||
|
{
|
||||||
|
console.log("cannot modify queue while processing");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(!Time.Queue)
|
if(!Time.Queue)
|
||||||
{
|
{
|
||||||
window.requestAnimationFrame(Time.Update);
|
window.requestAnimationFrame(Time.Update);
|
||||||
@ -66,6 +72,19 @@ var Time =
|
|||||||
Time.Queue = true;
|
Time.Queue = true;
|
||||||
Time.Jobs.push(inJob);
|
Time.Jobs.push(inJob);
|
||||||
},
|
},
|
||||||
|
Remove:function(inJob)
|
||||||
|
{
|
||||||
|
if(Time.Loop)
|
||||||
|
{
|
||||||
|
console.log("cannot modify queue while processing");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var index = Time.Jobs.indexOf(inJob);
|
||||||
|
if(index > -1)
|
||||||
|
{
|
||||||
|
Time.Jobs.splice(index, 1);
|
||||||
|
}
|
||||||
|
},
|
||||||
Update:function(inTimestamp)
|
Update:function(inTimestamp)
|
||||||
{
|
{
|
||||||
var delta;
|
var delta;
|
||||||
@ -78,14 +97,16 @@ var Time =
|
|||||||
delta = inTimestamp - Time.Stamp;
|
delta = inTimestamp - Time.Stamp;
|
||||||
Time.Stamp = inTimestamp;
|
Time.Stamp = inTimestamp;
|
||||||
|
|
||||||
|
Time.Loop = true;
|
||||||
for(i=0; i<Time.Jobs.length; i++)
|
for(i=0; i<Time.Jobs.length; i++)
|
||||||
{
|
{
|
||||||
if(!Time.Jobs[i](delta))
|
if(Time.Jobs[i](delta) === false)
|
||||||
{
|
{
|
||||||
Time.Jobs.splice(i, 1);
|
Time.Jobs.splice(i, 1);
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Time.Loop = false;
|
||||||
|
|
||||||
if(Time.Jobs.length > 0)
|
if(Time.Jobs.length > 0)
|
||||||
{
|
{
|
||||||
@ -99,7 +120,7 @@ var Time =
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function JobConic(inFrom, inRange, inDuration, inHandler)
|
function JobDuration(inDuration, inHandler, inDone)
|
||||||
{
|
{
|
||||||
var timeCurrent = 0;
|
var timeCurrent = 0;
|
||||||
var timeLimit = inDuration*1000;
|
var timeLimit = inDuration*1000;
|
||||||
@ -109,21 +130,28 @@ function JobConic(inFrom, inRange, inDuration, inHandler)
|
|||||||
{
|
{
|
||||||
timeCurrent += inDelta;
|
timeCurrent += inDelta;
|
||||||
timeMaxed = timeCurrent > timeLimit;
|
timeMaxed = timeCurrent > timeLimit;
|
||||||
if(timeMaxed){ timeCurrent = timeLimit; }
|
if(timeMaxed)
|
||||||
timeRelative = timeCurrent / timeLimit;
|
{
|
||||||
inHandler(inFrom + inRange*Math.sqrt(1 - Math.pow(1-(timeRelative), 2)));
|
inHandler(1);
|
||||||
return !timeMaxed;
|
inDone();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return inHandler(timeCurrent / timeLimit);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
document.querySelector("nav").addEventListener("click", function(inEvent)
|
document.querySelector("nav").addEventListener("click", function(inEvent)
|
||||||
{
|
{
|
||||||
var href = inEvent.target.getAttribute("href");
|
var domHtml = document.querySelector("html");
|
||||||
var html = document.querySelector("html");
|
var domGoal = document.querySelector(inEvent.target.getAttribute("href"));
|
||||||
var goal = document.querySelector(href).getBoundingClientRect().top;
|
var posStart = domHtml.scrollTop - 200;
|
||||||
|
var posRange = domGoal.getBoundingClientRect().top;
|
||||||
Time.Add( JobConic(html.scrollTop, goal, 0.4, function(inOutput){ html.scrollTop = inOutput; } ) );
|
var evtTick = function(inProgress){ domHtml.scrollTop = posStart + posRange*Math.sqrt(1 - Math.pow(1-(inProgress), 2)); };
|
||||||
|
var evtDone = function(){ Spy.Resume(); };
|
||||||
|
|
||||||
|
Spy.Suspend();
|
||||||
|
Time.Add( JobDuration(0.4, evtTick, evtDone) );
|
||||||
inEvent.preventDefault();
|
inEvent.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -134,11 +162,23 @@ var Spy =
|
|||||||
Attribute:"data-spy",
|
Attribute:"data-spy",
|
||||||
Members:[],
|
Members:[],
|
||||||
Defaults:[0, 1, 0, 1],
|
Defaults:[0, 1, 0, 1],
|
||||||
|
Disabled:false,
|
||||||
|
Suspend:function()
|
||||||
|
{
|
||||||
|
Spy.Disabled = true;
|
||||||
|
},
|
||||||
|
Resume:function()
|
||||||
|
{
|
||||||
|
Spy.Disabled = false;
|
||||||
|
Spy.UpdateAll();
|
||||||
|
},
|
||||||
UpdateAll:function()
|
UpdateAll:function()
|
||||||
{
|
{
|
||||||
var i, member, aabb, top, bottom, left, right;
|
var i, member, aabb, top, bottom, left, right;
|
||||||
var visible;
|
var visible;
|
||||||
|
|
||||||
|
if(Spy.Disabled){ return; }
|
||||||
|
|
||||||
for(i=0; i<Spy.Members.length; i++)
|
for(i=0; i<Spy.Members.length; i++)
|
||||||
{
|
{
|
||||||
member = Spy.Members[i];
|
member = Spy.Members[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user