2013-04-12 178 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; 
});