Jquery 动画 - 循环 div
Jquery Animation - looping divs
大家好,我在循环播放这些 div 时遇到了问题。
当第一个 div 离开屏幕时,我希望它跳回到屏幕的开头并再次开始循环。这里是jsfiddle。
我也有这个功能,我认为应该可以,但是没有用anything/I我做错了哈哈。
var boxes = $('#inner>div');
var speeds = [
0.5, 0.5, 0.35, 0.45, 0.46, 0.55, 0.5, 0.5
];
function update() {
var width = $('#wrapper').width;
// update boxes
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
var speed = speeds[i];
box.left -= speed;
if (box.left < -box.width) {
cloud.left = width;
}
};
window.setTimeout(update, 2000);
};
你会希望你的计时器 运行 快于每 2000 毫秒一次,我将其更改为每 20 毫秒 运行 一次。此解决方案基于使用 position: absolute;
并更改 div 的 left
属性。
您可以在此处进行的一些性能改进是存储 div 的宽度和 window 的宽度,因此您不必在每个循环中重新计算这些值。
如果你想加快 div 的速度,你可以使计时器更快(更多 cpu 负载)或者你可以增加速度数组中的值(没有太大的性能影响,可能看起来不像平滑)
var boxes = $('#inner>div');
var speeds = [
0.5, 0.5, 0.35, 0.45, 0.46, 0.55, 0.5, 0.5
];
function update() {
var width = $('#wrapper').width;
// update boxes
for (var i = 0; i < boxes.length; i++) {
var box = $(boxes[i]);
var speed = speeds[i];
var leftPos = box.position().left;
box.css({left: leftPos + speed});
if (leftPos + box.width() > $(window).width()) {
box.css({left: 0});
}
};
window.setTimeout(update, 20);
};
$('#inner>div').each(function(i){
$(this).css('top', i * 50);
});
update();
Fiddle: https://jsfiddle.net/u160Lg3h/
大家好,我在循环播放这些 div 时遇到了问题。
当第一个 div 离开屏幕时,我希望它跳回到屏幕的开头并再次开始循环。这里是jsfiddle。
我也有这个功能,我认为应该可以,但是没有用anything/I我做错了哈哈。
var boxes = $('#inner>div');
var speeds = [
0.5, 0.5, 0.35, 0.45, 0.46, 0.55, 0.5, 0.5
];
function update() {
var width = $('#wrapper').width;
// update boxes
for (var i = 0; i < boxes.length; i++) {
var box = boxes[i];
var speed = speeds[i];
box.left -= speed;
if (box.left < -box.width) {
cloud.left = width;
}
};
window.setTimeout(update, 2000);
};
你会希望你的计时器 运行 快于每 2000 毫秒一次,我将其更改为每 20 毫秒 运行 一次。此解决方案基于使用 position: absolute;
并更改 div 的 left
属性。
您可以在此处进行的一些性能改进是存储 div 的宽度和 window 的宽度,因此您不必在每个循环中重新计算这些值。
如果你想加快 div 的速度,你可以使计时器更快(更多 cpu 负载)或者你可以增加速度数组中的值(没有太大的性能影响,可能看起来不像平滑)
var boxes = $('#inner>div');
var speeds = [
0.5, 0.5, 0.35, 0.45, 0.46, 0.55, 0.5, 0.5
];
function update() {
var width = $('#wrapper').width;
// update boxes
for (var i = 0; i < boxes.length; i++) {
var box = $(boxes[i]);
var speed = speeds[i];
var leftPos = box.position().left;
box.css({left: leftPos + speed});
if (leftPos + box.width() > $(window).width()) {
box.css({left: 0});
}
};
window.setTimeout(update, 20);
};
$('#inner>div').each(function(i){
$(this).css('top', i * 50);
});
update();
Fiddle: https://jsfiddle.net/u160Lg3h/