我试图编写动画,以便在点击时,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;
}
});
答案 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;
}
});