我有一个幻灯片放映循环图像,然后在这些图像上面我有一些文字,然后是两个图像。我想要的是找出我试图制作动画的图像,但是我希望每个动画之间都有延迟。
我的困难在于我有3个幻灯片,每个幻灯片可以有2个图像需要动画分离到背景,幻灯片排列是根据用户的喜好排列的,所以从前端的角度来看,我永远不能100%确定将两个图像组合在一起,因此,我写了以下内容,
if($(".current .iphone").length) {
$(".current .iphone").animate({
opacity : 1,
left : "840px"
}, 800);
}
if($(".current .blackberry").length) {
$(".current .blackberry").animate({
opacity : 1,
left : "1119px"
}, 800);
}
if($(".current .samsung").length) {
$(".current .samsung").animate({
opacity : 1,
left : "783px"
}, 800);
}
if($(".current .htc").length) {
$(".current .htc").animate({
opacity : 1,
left : "900px"
}, 800);
}
if($(".current .nokia").length) {
$(".current .nokia").animate({
opacity : 1,
left : "823px"
}, 800);
}
if($(".current .nokia").length) {
$(".current .nokia").animate({
opacity : 1,
left : "823px"
}, 800);
}
这是我的HTML,
<div id="slideshow" role="main" style="position: relative; overflow: hidden; ">
<section data-background="_/images/elements/parralex-1.jpg">
<img src="_/images/iphone-blue.png" alt="iPhone mybunjee" class="iphone foreground phone" />
<img src="_/images/blackberry-pink.png" alt="Blackberry mybunjee" class="blackberry background phone" />
</section>
<section data-background="http://www.samtordoffracing.com/wp-content/uploads/2012/07/Tordoff-14.jpg">
<img src="_/images/iphone-blue.png" alt="iPhone mybunjee" class="iphone foreground phone" />
<img src="_/images/blackberry-pink.png" alt="Blackberry mybunjee" class="blackberry background phone" />
</section>
<section data-background="http://www.samtordoffracing.com/wp-content/uploads/2012/07/Tordoff-14.jpg">
<div class="samsung foreground"></div>
<div class="nokia foreground"></div>
</section>
</div>
基本上我正在做的是尝试找出当前幻灯片中存在哪些图像,然后设置动画,然而当前这两个图像同时生成动画,并且我希望在一个图像被动画之间有一个随机延迟然后是下一个。
有没有更好的方法来做我正在做的事情?
答案 0 :(得分:0)
我不完全明白你想做什么,但我改变了你的jQuery结构。
您需要为此操作定义trrigger /事件,例如hover()或click()
使用它来减少代码:
$('.current').hover(function() {//mouse over event
var currentClass = $(this).children().attr('class');//takes mouse overed element's chlid's class
if($('.current .'+currentClass).length) {
$(".current ."currentClass).animate({
'opacity' : '1',
'left' : '840px'
}, 800);
}
});
如果您不想定义触发事件,可以使用each()方法和setInterval()进行定时动画。
答案 1 :(得分:0)
您可以尝试以下方式:
$.each($('#slideshow').find('img'), function(i, img){
if($(img).hasClass('iphone')){
setTimeout(
function(){
$(img).animate({
opacity : .5,
'margin-left' : "+=40px"
}, 800)
}, Math.random() * i *800);
}
if($(img).hasClass('blackberry')){
setTimeout(
function(){
$(img).animate({
opacity : .5
'margin-left' : "-=40px"
}, 800)
}, Math.random() * i *800);
}
});
无论如何,这里有一些例子,例如THIS。