I have a javascript object that looks like this,
var telephones = {
/*
"phone" : {
duration : time it takes to animate element in,
leftIn : position of element once on the incoming animation
leftOut : position of element on the outgoing animation
delay : delay between two animations
}
*/
"phone1": {
duration : 850,
leftIn : "408px",
leftOut : "9999px",
delay : 0,
},
"phone2" : {
duration : 600,
leftIn : "962px",
leftOut : "999px",
delay : setDelay(),
},
"phone3" : {
duration : 657,
leftIn : "753px",
leftOut : "9999px",
delay : 0,
},
"phone4" : {
duration : 900,
leftIn : "1000px",
leftOut : "9999px",
delay : setDelay(),
},
"phone5" : {
duration : 1200,
leftIn : "800px",
leftOut : "9999px",
delay : 0,
},
"phone6" : {
duration : 792,
leftIn : "900px",
leftOut : "9999px",
delay : setDelay(),
},
};
I am using the above object to try an animate individual elements within a slide, that is already animated via the jquery cycle plugin. I am using the code in the following way,
$('#slideshow').cycle({
fx: 'scrollHorz',
before : triggerParralex,
after : removeParralex,
easing : 'easeOutCubic',
speed : 2000
});
so the code above initiates the cycle plugin. And then I am using the before and after callbacks to run 2 more functions, these functions look like this,
function bgChange(curr, next, opts) {
var background = $(".current").attr('data-background');
$.backstretch(background, {target: "#backstrectch", centeredY: true, speed: 800});
}
function triggerParralex(curr, next, opts) {
//move any phones that are in the viewport
for (var key in telephones) {
var obj = telephones[key];
for (var prop in obj) {
if($(".current ." + key).length) { //does .custom .phone1/2/3/4/5/6 exist if it does we can carry on
setTimeout(function() {
$(".current ." + key).animate({
"left" : obj["leftOut"],
"opacity" : 0
}, obj["duration"]);
}, obj["delay"]);
}
}
}
//change the background
bgChange();
//remove the current class from the DIV
$(this).parent().find('section.current').removeClass('current');
}
function removeParralex(curr, next, opts) {
//give the slide a current class so that we can identify it.
$(this).addClass('current');
//animate in any phones that belong to the current slide
for (var key in telephones) {
var obj = telephones[key];
for (var prop in obj) {
console.log(obj["leftIn"])
if($(".current ." + key).length) { //does .custom .phone1/2/3/4/5/6 exist if it does we can carry on
setTimeout(function() {
$(".current .phone1").animate({
"left" : obj["leftIn"],
"opacity" : 1
}, obj["duration"]);
}, obj["delay"]);
}
}
}
}
My problems are the following,
I am trying animate the images that are in my section elements, the section elements are what are already sliding via the cycle plugin, and this to me feels like it is stopping my images being animated at later stage?
The second problem seems to be that while my script will happily find $(".current .phone1")
is only seems to add the properties of phone6 from the object, I have made a fiddle.
As you can see from the fiddle the sections with #slideshow
are cycling however the images within them are not being animated...why?