单击时左右移动div

时间:2013-04-12 22:04:15

标签: javascript jquery animation

我想让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;
    });
}

8 个答案:

答案 0 :(得分: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/

答案 1 :(得分:3)

一些问题:

  1. if (checker = true)

    您正在使用作业(=)而不是检查相等性(=====)。

  2. 您的检查是在绑定时间进行的

    您想在点击事件中查看checker

  3. 像这样的东西可以解决这个问题:

    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/

答案 2 :(得分:3)

首先,不要使用new Boolean()。只需将其初始化为var checker = true;

即可

其次,您在第一个条件(checker = true)中使用赋值运算符。

第三,你没有在每次点击时执行条件。

第四,你的代码非常复杂。这是一个示例:

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

答案 3 :(得分: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语句(单=)中执行分配,而不是使用==来比较您的操作数。

答案 4 :(得分:0)

您需要分配一次点击事件,并在其中执行逻辑: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;
    }
});

答案 5 :(得分: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;
        }
    });

答案 6 :(得分: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

答案 7 :(得分:0)

试试这个:

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