我的div
宽度为0px
。在用户滚动x
距离后,我想将div
设为140px
。
当我滚动到那一点时,在看到动画之前有一段很长的延迟。我越滚动延迟时间越长。我还将包含div
设置为固定在同一点。固定项目工作正常但动画始终延迟:
HTML:
<div class="menu-bar">
<div class="wrap">
<div id="menu-logo">
<img src="..." />
</div>
<nav id="site-navigation" role="navigation">...</nav>
<div class="right-menu">...</div>
</div>
</div>
JS:
$(window).scroll(function(){
var barPos = $('#content').offset().top - $(document).scrollTop();
var menuHeight = $('.menu-bar').height();
var topColors = $('#top-colors').height();
if(barPos <= (topColors+menuHeight)) {
$('.menu-bar').css({'position':'fixed','bottom':'auto','top':'0px'});
$('#menu-logo').animate({'width':'140px'});
} else {
$('.menu-bar').css({'position':'absolute','bottom':'0px','top':'auto'});
$('#menu-logo').animate({'width':'0px'});
}
});
答案 0 :(得分:2)
滚动文档视图或元素时会触发scroll事件。
这意味着您的回调会多次触发,因此每个jQuery.fn.animate
都会将新动画添加到队列中。
作为一个快速解决问题,您可以在每次jQuery.fn.clearQueue
来电之前尝试拨打jQuery.fn.stop
或jQuery.fn.animate
。
答案 1 :(得分:0)
您可以在JQuery中的css声明中更改动画:
$(window).scroll(function(){
var barPos = $('#content').offset().top - $(document).scrollTop();
var menuHeight = $('.menu-bar').height();
var topColors = $('#top-colors').height();
if(barPos <= (topColors+menuHeight)) {
$('.menu-bar').css({
'position':'fixed',
'bottom':'auto',
'top':'0px',
'width': '140px',
'transition': 'width 0.4s ease'
});
} else {
$('.menu-bar').css({
'position':'absolute',
'bottom':'0px',
'top':'auto'
'width': '0',
'transition': 'width 0.4s ease'
});
}
});