【发布时间】:2014-07-17 10:34:10
【问题描述】:
我正在尝试在两个背景之间进行过渡:
$(document).ready(function() {
// Set first background
$('#bg .bg').backstretch( bg[0]['normal'], {speed: 0} );
$('li').click(function() {
var i = $(this).index();
// Select first bg element
var bg1 = $('#bg .bg:first-child');
// Add second element
$('#bg').append('<div class="bg" />');
var bg2 = $('#bg .bg:nth-of-type(2)');
$(bg2).css('left', '200%');;
// Set second element background
$(bg2).backstretch( bg[1]['normal'], {speed: 0} );
// Move first background out
$(bg1).animate({
'left': '-100%'
}, { duration: 500, queue: false });
// Move second background in
$(bg2).animate({
'left': '0'
}, { duration: 500, queue: false });
});
});
我的绝对定位 100%x100% 背景的 html 是:
<div id="bg">
<div class="bg"></div>
</div>
bg[x]['normal'] 只是带有图像路径的字符串。
简而言之,我的代码将一个新的.bg div 附加到#bg 并使用backstretch 设置背景图像。然后,它通过将第一个背景向左移动来为第一个背景设置动画,而第二个背景从右侧进入。
代码工作得很好,除了在过渡期间两个背景之间有一个白色间隙。这可能是因为 bg1 在 bg2 之前获得动画效果。
如何确保这两个背景在同一时刻开始动画?
(queue: false 取自对同一问题的回答,但在我的情况下绝对行不通)
【问题讨论】:
-
你能不能把两个绝对定位的背景都包装在一个包装器 div 中,然后只为一个包装器 div 设置动画以向左滑动,然后从包装器 div 中删除旧背景?这意味着只有一个动画正在播放,因为它们都向左滑动完全相同的距离。
-
@Mark 是的!这就是我最终要走的路。结果变得更容易,也更少混乱
-
该死!我知道我应该把它写下来作为答案。为一个基本动作制作两个动画似乎有点疯狂。告诉我,在结束时或破坏旧背景时是否有任何跳跃?我有点担心这种方法会发生类似的事情,但如果它工作得足够顺利,我可能会在我正在进行的项目中尝试这个。
-
@Mark 在我的情况下,我只是没有破坏其他背景。我的页面的背景是一种“地图”,当用户单击链接时,背景会移动到“地图”上的一个点。所以我更容易将几个背景图像粘贴到一个包装器中并沿着它滚动,而不会破坏单个背景图像。所以我从来没有遇到过销毁它们的问题。但是我要指出,我在调整窗口大小时仍然遇到问题(偶尔调整单个图像的大小会偏离几个像素,烦人......)
-
我很想知道当你解决它时(如果你解决了它),调整大小问题最终会出现什么问题。我以前从未真正遇到过调整大小的问题。