[英]How do I use the properties created by an animate function in that animate function's callback?
我正在处理一个包含一系列图像的页面。 每个图像将在一个容器中,并且每个容器将向左浮动。 由于图像的宽度会变化,因此无法知道每行上有多少图像。 当访客点击图片时,图片及其容器就会展开。
在某些情况下,这种扩展意味着单击的图像将跳至下一行,并因此而离开屏幕。 我正在寻找一种使屏幕无论走到哪里都跟随点击的图像的方法。
到目前为止,这是我的代码:
<script type="text/javascript">
$(document).ready(function(){
$(".ExampleImage").toggle(
function(){
var Image = $(this);
var Container = $(this).closest(".ImageContainer");
Image.switchClass("ExampleImageContracted","ExampleImageExpanded",500);
Container.css('height','auto');
Image.queue(scrollToExample(Image));
},
function(){
var Image = $(this);
var Container = $(this).closest(".ImageContainer");
Image.switchClass("ExampleImageExpanded","ExampleImageContracted",500);
Container.animate({'height':'250'},500,scrollToExample(Image));
}
);
function scrollToExample(Image) {
var NewTop = $(Image).closest(".Example").offset();
$('html, body').animate( {
scrollTop:NewTop.top
}, 1000);
}
});
</script>
请注意,我在.animate
和.queue
中都使用了回调,以尝试正确地对其进行排序。 不幸的是,它为图像容器的.offset
输入的.offset
是旧的顶部,而不是在动画之后出现的值。 我正在寻找一种在动画完成后获取容器顶部的方法。 任何建议将不胜感激。
如果您想查看上面的代码,请访问以下链接。 请注意,当您到达页面并单击示例4时,屏幕不会向下滚动到示例4的新位置。
尝试更改这两行:
Image.queue(scrollToExample(Image));
...
Container.animate({'height':'250'},500,scrollToExample(Image));
至:
Image.queue(function() { scrollToExample(Image); });
...
Container.animate({'height':'250'},500,function(){scrollToExample(Image);});
您没有将回调函数传递给.queue()
和.animate()
,而是立即调用scrollToExample()
函数并将其结果传递给.queue()
和.animate()
。
话虽如此,我认为您根本不需要在此使用.queue()
。
还请注意,在scrollToExample()
函数中,您可以说Image.closest(...
而不是$(Image).closest(...
因为Image
已经是jQuery对象。(除非您希望函数能够处理)其他类型的输入。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.