如何阻止变量改变它的值

时间:2015-01-19 05:40:26

标签: jquery

我试图编写动画,以便在点击时,jQuery会在变量(projectPosition)中记录相对于浏览器窗口的对象位置,然后将其移动到其他位置并将其设置为"开放&#34 ;.如果再次单击它,它将移回到它的原始位置,如变量中记录的那样,并将其标记为已关闭。

问题是,我在事件中声明了这个变量,但这意味着当它再次被点击时会被重新声明,覆盖它的原始位置的值。我尝试在if语句中声明变量,这样只有在单击和关闭项目时才会设置它,但是如果它不能从else中访问它。

有没有办法让jQuery保持从标记为关闭时设置的值?这是代码:

$(".projectContainer").click(function(){
    var projectPosition = $(this).offset();;
    var selProject = (this);
    if (!projectOpen){
        $(".projectContainer").not(this).fadeOut(200,"swing",function(){
            $(selProject).animate({
                left:'0px',
                top:'80px',
                width:'100vw'},600,"easeOutQuint");
        });     
        projectOpen = true;
    }
    else if (projectOpen){
        $(this).stop(true, true).animate({
            left:'projectPosition.left',
            top:'projectPosition.top',
            width:'384px'},400,"swing",function(){
                $(".projectContainer").not(this).fadeIn(200);
            });
        projectOpen = false;
    }
});

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

if(typeof(variable) != "undefined" && variable !== null) {
     //Write to variable because item wasn't clicked.
}

因此,一旦设置了变量,再次点击它就不会再次设置,因为它不是"未定义"而不是" null"。

答案 1 :(得分:0)

这里的问题是,您正在使用一个局部变量,该变量仅在退出事件处理程序之前存在。在外部范围内声明变量,值赋值也应仅在if

中发生
var projectPosition;
$(".projectContainer").click(function () {
    var selProject = (this);
    if (!projectOpen) {
        projectPosition = $(this).offset();;
        $(".projectContainer").not(this).fadeOut(200, "swing", function () {
            $(selProject).animate({
                left: '0px',
                top: '80px',
                width: '100vw'
            }, 600, "easeOutQuint");
        });
        projectOpen = true;
    } else if (projectOpen) {
        $(this).stop(true, true).animate({
            left: projectPosition.left,
            top: projectPosition.top,
            width: '384px'
        }, 400, "swing", function () {
            $(".projectContainer").not(this).fadeIn(200);
        });
        projectOpen = false;
    }
});