Jquery backstretch.js持续时间与.animate()延迟不同步
前言:我刚开始编写自己的jQuery代码,并且已经编写了下面的animateContinously函数 我使用的是一个完整的浏览器视口/背景幻灯片和功能,可以借助显示在backstretch控制图像顶部的文本来更改颜色,具体取决于显示的是哪个backstretch图像。这是可行的,但如果我将后退持续时间和动画延迟设置为相同的数字,即:5000 5秒,则后退持续时间和动画延迟不同步。因此,我尝试将它们偏移1000 1秒,文本和反向拉伸图像在完全相同的时间淡入/淡出,正如所希望的那样……但在15次左右的转换后,它们再次失去同步 关于为什么相同的持续时间和延迟时间量不起作用,有什么想法/帮助吗?和/或为什么1秒偏移开始工作,然后失去同步?这是我的密码:Jquery backstretch.js持续时间与.animate()延迟不同步,jquery,animation,delay,duration,jquery-backstretch,Jquery,Animation,Delay,Duration,Jquery Backstretch,前言:我刚开始编写自己的jQuery代码,并且已经编写了下面的animateContinously函数 我使用的是一个完整的浏览器视口/背景幻灯片和功能,可以借助显示在backstretch控制图像顶部的文本来更改颜色,具体取决于显示的是哪个backstretch图像。这是可行的,但如果我将后退持续时间和动画延迟设置为相同的数字,即:5000 5秒,则后退持续时间和动画延迟不同步。因此,我尝试将它们偏移1000 1秒,文本和反向拉伸图像在完全相同的时间淡入/淡出,正如所希望的那样……但在15次左
<script src="jquery.js"></script>
<script src="jquery-color.js"></script>
<script src="backstretch.js"></script>
<script>
$.backstretch([
"_img/bg01.jpg",
"_img/bg02.jpg"
], {
fade: 1000,
duration: 4000
});
</script>
<script>
function animateContinuously($element, attr, values) {
var i = 0, count = values.length;
setInterval(function() {
i = (i + 1) % count;
var props = {};
props[attr] = values[i];
$element.animate(props, 1000);
}, 5000); // // in sync with backstretch() if 1000 more, but falls out of sync after 15-18 transitions
animateContinuously($("#color-change1"), 'color', ['#de7056', '#4ec67f']);
animateContinuously($("#color-change2"), 'svgFill', ['#de7056', '#4ec67f']);
</script>
</body>
由于背景图像的循环和设置间隔没有联系在一起,它们总是会失去同步。解决方案是放弃setInterval,而是使用。触发backstretch.before事件时,您将启动动画
$(window).on('backstretch.before', function() {
// Start animations here.
});
如果要设置动画的图像、颜色和其他值的数量相同,则可以有:
var TRANSITION_DURATION = 1000,
PAUSE_DURATION = 4000;
// Note: These arrays should all have the same length.
var IMAGES = ['_img/bg01.jpg', '_img/bg02.jpg'],
COLORS = ['#de7056', '#4ec67f'];
var index = 0;
$.backstretch(IMAGES, {
fade: TRANSITION_DURATION,
duration: PAUSE_DURATION
});
$(window).on('backstretch.before', function() {
index = (index + 1) % IMAGES.length;
$('#color-change1').animate({ backgroundColor: COLORS[index] }, TRANSITION_DURATION);
$('#color-change2').animate({ svgFill: COLORS[index] }, TRANSITION_DURATION);
});
如果值数组的长度不完全相同,您可以执行类似于的操作。Wow!再次感谢。这是非常有用的。我的数组总是相同的长度,所以我将使用您的第一个示例。我确实也看了第二个JSFIDLE,但我不明白为什么999999灰色在数组中第二个是43c67橙色时会应用于颜色更改1中的第二个?@codeview-这是因为我将两个形状的初始颜色都设置为白色。我现在已经更改了它,所以它们最初都是de7056,是阵列中的第一种颜色。i变量从零开始,但它们在动画之前递增,因此第一次运行动画时,它会转换为数组中的第二种颜色,因为i=1。