2012-04-09 61 views
1

所以我有一段代码:jQuery的定位和动画

jQuery.fn.center = function(parent) { 
parent = this.parent(); 
this.css({ 
"position": "absolute", 
"top": ((($(parent).height() - this.outerHeight())/2) + $(parent).scrollTop() + "px"), 
"left": ((($(parent).width() - this.outerWidth())/2) + $(parent).scrollLeft() + "px") 
}); 
return this; 
} 

此代码抓住一个元素,并将其移动到父的中心。很好地工作。有几件事情我希望它能够做到它所做的一切。

  1. 我需要它浮在该父项的所有其他元素之上。 z指数或多或少。我试图应用z-index,但似乎没有奏效。我不知道,如果我可能做错了,或者如果有更好的方法。

  2. 我需要它回到它所处的位置。这种方式的工作方式是块将被定位在页面上(通过CSS),并且当用户点击时,它将它移动到中心正如代码已经在做的那样。有没有什么办法,如果用户点击退出按钮,我可以编程所述按钮将其移回原来的位置?我不知道我是否可以在jQuery中传递变量。

  3. 此选项多为美观,并且我不认为有必要,但想它,如果你有一点点额外的时间。我希望块从它的位置滑动到页面的中心,然后返回,而不是在那里弹出。正如我所说,这只是美学,我真的不需要这样的事情发生。

非常感谢任何能够帮助我的人。

回答

2

我试图实现类似的要求,但它应该具有所需的所有功能。尝试DEMO

我需要它浮在该父项的所有其他元素之上。 Z索引 或多或少。我试图应用z-index,但似乎没有奏效。 我不知道如果我可能已经做错了,或者有更好的 方式。

对于这种情况,我总是在1001或更大的范围内使用z-index。即使在演示中,它也能正常工作。试试这个,让我们知道你是否还没有为你工作。

我需要它搬回到它的位置。这样的工作方式, 是块会被放置在页面上(通过CSS),当 用户点击,它移动它到页面的中心,因为代码是 已经在做。有没有什么办法,如果用户点击退出按钮, 我可以编程所述按钮将其移回原来的位置? 我不知道我是否可以在jQuery中传递变量。

我使用.data API存储元素的原始位置,并在单击关闭(退出)按钮时将其恢复到原始位置。

此选项更美观,我不认为它是必要的,但 会喜欢它,如果你有一点额外的时间。我希望块 从它的位置滑动到页面的中心,并返回,因为 反对在那里弹出。正如我所说,这只是美学 ,我真的不需要这样的事情发生。

您可以使用.animate而不是CSS,它将在指定的时间内将元素从原始位置超出其目标位置。

+0

我自己尝试过。我做了一些改变以适应我的需求,但我没有得到任何东西。如果你想看看,我在下面的Nick的评论中发布了一个链接。 – 2012-04-09 20:19:08

+0

@JerryRay我需要在哪里查看代码?您在jsFiddle中的代码http://jsfiddle.net/skram/DCvNW/ – 2012-04-09 20:30:10

+0

它从注释开始//将虾图像替换为jQuery中的内容。您也可以查看showTips和hideTips功能。 – 2012-04-09 20:46:54

1

为了它漂浮在所有其他元素,你是对的,你需要使用的z-index为,但你需要确保每个元素都被定位,每个元素都有一个z-index的价值,包括父母。家长也需要定位。

为了恢复到原来的位置,您必须抓取当前的lefttop偏移量。在你的click事件监听器中,将元素移回原来的位置。

jQuery.fn.center = function(parent) { 
    var oldTop = this.css('top'); 
    var oldLeft = this.css('left'); 
    parent = this.parent(); 
    this.css({ 
    "position": "absolute", 
    "top": ((($(parent).height() - this.outerHeight())/2) + $(parent).scrollTop() + "px"), 
    "left": ((($(parent).width() - this.outerWidth())/2) + $(parent).scrollLeft() + "px") 
    }); 
    this.click(function(e) { 
    this.css('top', oldTop); 
    this.css('left', oldLeft); 
    }); 
    return this; 
} 

为了做动画(而不只是跳转到的位置),您可以动画使用jQuery的lefttop值。

this.animate({ 
    'top': ((($(parent).height() - this.outerHeight())/2) + $(parent).scrollTop() + "px"), 
    'left': ((($(parent).width() - this.outerWidth())/2) + $(parent).scrollLeft() + "px") 
}); 

编辑你可能要考虑使用this.offset()。这将返回一个包含方法lefttop的对象。

var offset = this.offset(); 
var oldTop = offset.top; 
var oldLeft = offset.left; 
+0

好的。所以每个div区块都必须定位。考虑到我有他们手动定位CSS,我可以只设置一个相对定位?如果我明白这不会改变它们的布局方式。 – 2012-04-09 18:41:35

+0

您可以将绝对定位的元素放置在相对定位的父级中。在相对关系中,元素仍然会相互影响。在相对:绝对的,他们不会。 – 2012-04-09 19:17:13

+0

我可能会更容易告诉你我有什么。指的是上面发布的内容。我实现了代码,并根据需要进行了更改,但该框未重新定位。它做了一切。这个框的jQuery从注释开始//将虾图替换为内容。 http://pastie.org/3757467 – 2012-04-09 19:31:36