2013-04-12 179 views
1

我想讓DIV向左走,我第一次點擊它,回到原來的位置,第二次,再左轉,第三等。移動DIV左右的點擊

那麼,爲什麼不這方面的工作: http://jsfiddle.net/kS7KE/2/

var checker = new Boolean(); 
checker = true; 
if (checker = true){ 
    $("#div").click(function() { 
     $(this).animate({left: "10%"},400); 
     checker = false; 
    }); 
} 
if (checker != true){ 
    $("#div").click(function() { 
     $(this).animate({left: "30%"},400); 
     checker = true; 
    }); 
} 

回答

3

爲什麼這麼多的代碼? :)

var checker = true; 
$("#div").click(function() { 
    targetLeft = checker ? "10%" : "30%"; 
    $(this).animate({left: targetLeft},400); 
    checker ? checker = false : checker = true; 
}); 

http://jsfiddle.net/kS7KE/5/

+3

我們需要去短:'$(本).animate({左:檢查 「10%」: 「30%」},400);!檢查=檢查;'; D – Andy

+0

+1 checker =!checker' ..它是美麗的 – Kaloyan

+0

@Andy擺脫所有這些空間! ;) – lbstr

1

你不應該附加多個事件處理程序像你這樣其互相沖突的同一個對象。這是一個更清晰,更簡單的版本,它可以完成代碼應該做的事情。正如你所看到的,它只使用一個事件處理程序。

var checker = true; 
$('#div').click(function(){ 
    if(checker){ 
     $(this).animate({left: "10%"},400); 
     checker = false; 
    } else { 
     $(this).animate({left: "30%"},400); 
     checker = true; 
    } 
}); 

另外你在第一個if語句執行任務(單=)而不是使用==來比較你的操作數。

0

你需要一次分配click事件,並做邏輯是:http://jsfiddle.net/kS7KE/2/

var checker = new Boolean(); 
checker = true; 
$("#div").click(function() { 

if (checker == true){  
     $(this).animate({left: "10%"},400); 
     checker = false; 
    } 
else{ 

     $(this).animate({left: "30%"},400); 
     checker = true; 
    } 
}); 
0

使用此

var checker = new Boolean(); 
checker = true; 

    $("#div").click(function() { 
     if (checker == true){ 
     $(this).animate({left: "10%"},400); 
     checker = false; 
      } 
     else 
     { 
      $(this).animate({left: "30%"},400); 
     checker = true; 
     } 
    }); 
0
var checker = true; 

$("#div").on('click', function() { 
    if (checker == true) { 
     checker = false; 
     $(this).animate({ 
      left: "10%" 
     }, 400); 

    } else { 
     $(this).animate({ 
      left: "30%" 
     }, 400); 
     checker = true; 
    } 
}); 

Demo

3

的幾個問題:

  1. if (checker = true)

    您正在使用任務(=)而不是等值檢查(=====)。

  2. 你的檢查發生在綁定時

    你想在點擊事件,以檢查checker

Soemthing這樣就可以了:

var checker = new Boolean(); 
checker = true; 
$("#div").click(function() { 
    var left = checker ? "10%" : "30%"; 
    $(this).animate({left: left},400); 
    checker = !checker; 
}); 

http://jsfiddle.net/lbstr/L4TN3/

+0

我想你需要更改檢查器分配到檢查器=!檢查器 – Nabheet

0

試試這個:

var checker = true; 
$("#div").on('click', function() { 
    var left = checker ? '10%' : '30%'; 
    $(this).animate({left: left},400); 
    checker = !checker 
}); 
+0

也許你可以向OP解釋爲什麼你的代碼工作,爲什麼他的代碼不工作。 – Nabheet

3

首先,不要使用new Boolean()。只需將它初始化爲var checker = true;

其次,您在第一個條件(checker = true)中使用了賦值運算符。

第三,您沒有對每次點擊執行條件。

第四,你的代碼非常複雜。這裏有一個例子:

var checker = true; 
$('#div').click(function() { 
    $(this).animate({ 
     left: checker ? "10%" : "30%" 
    }); 
    checker = !checker; 
});