2013-06-05 226 views
1

我有一個關於jQuery動畫的問題。每次點擊都應該改變背景圖像。jQuery每次點擊更改背景

這是我的榜樣,這是行不通的:

http://jsfiddle.net/aldimeola1122/kRjrn/215/

$(document).ready(function(){ 

    function deneme(){ 
    $('#background').animate({ opacity: 1 }, 3000); 
    } 
    function deneme2(){ 
    $('#background2').animate({ opacity: 1 }, 3000); 
    } 

    $("#deneme").click(deneme); 
    $("#deneme2").click(deneme2); 

}); 

我如何得到它的工作?

+3

問題的一部分可能是'#background2'不存在...... –

+0

第一個鏈接在Chrome中運行,第二個鏈接未分配,您必須添加'$(「#deneme2」)。點擊(deneme2);'也改變「background2」爲只是「背景」建議 – Jacopofar

+0

在CSS中已經有一個#background2 – aldimeola1122

回答

1

你錯過了一些東西,你沒有在div#background2,而且你沒有設置你的點擊處理程序(在您提供的演示的jsfiddle)

jsFiddle Demo

function deneme() { 
    $('#background2').animate({ opacity: 0 }, 100); 
    $('#background').animate({ opacity: 1 }, 3000); 
} 
function deneme2() { 
    $('#background').animate({ opacity: 0 }, 100); 
    $('#background2').animate({ opacity: 1 }, 3000); 
} 

$("#deneme").click(deneme); 
$("#deneme2").click(deneme2); 
+0

,也許隱藏每個點擊前的背景 –

+0

@roasted新增,好點! –

+0

謝謝,這很好,但如果我點擊1.Sayfa和2.Sayfa什麼也沒有 – aldimeola1122

3

這個怎麼樣:

http://jsfiddle.net/hWgZ8/

$(document).ready(function(){ 

function deneme(){ 
    $('#background2').animate({ opacity: 0,queue:false }, 3000); 
    $('#background').animate({ opacity: 1 ,queue:false}, 3000); 
} 
function deneme2(){ 
    $('#background').animate({ opacity: 0 ,queue:false}, 3000); 
    $('#background2').animate({ opacity: 1 ,queue:false}, 3000); 
} 

$("#deneme").click(deneme); 
$("#deneme2").click(deneme2); 

});

編輯:「隊列:假」是這樣,它不會等待以前的動畫

+0

排隊+1;這通常會引發jquery動畫中初學者的循環! – smilebomb

+0

謝謝它完美的工作 – aldimeola1122

+0

aha,我沒有在我的答案中排隊。這比把它放在函數回調中要更整齊:) –

0

正如其他人所說,你沒有足夠的#background2 DOM元素或者該元素設置處理。另外,如果您在沒有切換位置的情況下單擊它們,背景將相互重疊。也就是說,第二個背景將覆蓋第一個背景。除非你在每個事件處理程序中隱藏相反的背景。

像這樣(http://jsfiddle.net/kRjrn/221/):

function deneme(){ 
    $('#background').animate({ opacity: 1 }, 3000); 
    $('#background2').animate({ opacity: 0 }, 1000); 
} 
function deneme2(){ 
    $('#background2').animate({ opacity: 1 }, 3000); 
    $('#background').animate({ opacity: 0 }, 3000); 
} 
0

這並不明顯,你真的想要發生什麼,但如果期望的結果是,當你點擊任一鏈接它改變了背景圖像,淡入淡出過渡,我認爲它會更好通過更改背景的類來完成。我會做在這個叉形小提琴:

http://jsfiddle.net/4JGmK/1/

改變CSS:

#background { 
    opacity: 0; 
    margin: 0; 
    padding: 0; 
    z-index: -1; 
    position: absolute; 
    width: 100%; 
    height: 100%; 
} 
.background1 { 
    background-image: url("http://www.noupe.com/wp-content/themes/noupe/images/noupe-404.png"); 
} 
.background2 { 
    background-image: url("http://upload.wikimedia.org/wikipedia/commons/7/7b/Sdf_losc-benf_22.11.05_-_4.JPG"); 
} 

改變JS:

$(document).ready(function() { 
    $("#deneme").click(function(){deneme('background1', 'background2')}); 
    $("#deneme2").click(function(){deneme('background2', 'background1')}); 
}); 

function deneme(newclass, oldclass) { 
    if ($('#background').hasClass(oldclass)) { 
     //fade out the other background first then fade the right one in 
     $('#background').animate({ 
      opacity: 0 
     }, 3000, function() { 
      $('#background').removeClass(oldclass).addClass(newclass).animate({ 
       opacity: 1 
      }, 3000); 
     }); 
    } else if($('#background').hasClass(newclass)) { 
     //already got this background, don't do anything 
     return false; 
    } else { 
     //doesn't have either at the moment, fade in the right background 
     $('#background').addClass(newclass).animate({ 
      opacity: 1 
     }, 3000); 
    } 
} 

的deneme功能我重構仍然感覺有點笨重,但它至少起作用。