【发布时间】:2011-06-28 15:16:23
【问题描述】:
【问题讨论】:
-
这绝对是插件中的 .pause .resume 。
【问题讨论】:
Live Demo(出于测试目的删除了一堆列表项)
不使用暂停/恢复插件,因为我很确定这是导致问题的原因。这样做只是在悬停时停止动画,并在您离开时重新启动动画。由于您已经将动画设置为基于当前位置,因此它会正常恢复。
编辑 修复了每次悬停时动画减慢的问题。无论循环多少次,现在都应该可以正常工作。
var vox_news = 0;
$('.voxNews li').each(function() {
vox_news += $(this).outerWidth( true );
});
$('.voxNews').parent().append($('.voxNews').clone());
function setupNews(w) {
function phase1() {
var voxNews = $('.voxNews').first(),
curMargin = voxNews.css('margin-left').replace("px", ""),
animSpeed = (w*20) - (Math.abs(curMargin)*20);
voxNews.animate({'margin-left' : '-' + w + 'px'}, animSpeed, 'linear', phase2);
}
function phase2() {
$('.voxNews').first().css({'margin-left' : '0px'});
phase1();
}
$('.voxNews li a').hover(function() {
$('.voxNews').stop();
}, function() {
phase1();
});
phase1();
}
setupNews(vox_news);
【讨论】:
我认为你应该像这样定义一个全局布尔变量:
var isAnimating = false;
然后根据该变量控制您的动画。例如:
animateNews() {
if (isAnimating) {
//list animation
}
}
listResume () { isanimating = true; }
listPause () { isanimating = false; }
你的动画会是这样的:
window.onload = function () { var t = setTimeout("animateNews", 40); }
我不会为此使用 jQuery,因为如果您开始制作动画,jQuery 也会使用一点 CPU...如果您想要平滑地增长盒子或滑动图像(画廊或类似的东西),您将需要它)。
【讨论】:
删除您的 hover 处理程序并添加:
$('.voxNews li').delegate('a', 'mouseenter', function() {
$('.voxNews').pause();
});
$('.voxNews li').delegate('a', 'mouseleave', function() {
$('.voxNews').resume();
});
【讨论】: