我有一个时间表,其示出了根据所选择的日期不同的内容。日期可以通过点击时间轴来选择,或者用鼠标滚轮滚动。 我有一些附加到每个内容的动画,为了有不同的内容元素淡出/淡出效果,为此,我使用嵌套动画和回调。拆离事件的工作仅在第一次使用jQuery
我不能做的,是等待一个动画结束,下一个开始之前,如果滚动快速度。 或者,更好的,我拆开滚动事件的动画功能的开始,并重新将其固定,作为最后animate
函数调用的回调:该作品仅在第一次,但不是随后滚动。
有什么想法?
功能检测滚动:
//detect mouse scrolling and determine the direction
function detectScroll() {
$('.events-content').first().bind('mousewheel', function (e) {
var delta = e.originalEvent.wheelDelta;
if (delta > 0) {
jumpToEvent('prev');
} else {
jumpToEvent('next');
}
});
//firefox
$('.events-content').first().on('DOMMouseScroll', function (e) {
var delta = e.originalEvent.detail;
if (delta < 0) {
jumpToEvent('prev');
} else if (delta > 0) {
jumpToEvent('next');
}
});
}
功能detatching滚动
function detachScroll(){
console.log('detach');
$('.events-content').first().unbind('mousewheel');
$('.events-content').first().off('DOMMouseScroll');
}
功能的动画,jumpToEvent函数调用时,选择正确的内容显示:
//display correct content depending on the selected date
function updateVisibleContent(event, eventsContent) {
var visibleContent = ...., selectedContent =....;
detachScroll();
visibleContent.find('....').each(function() {
$(this).animate({
opacity: 0 //hide current content
}, 600, function() {
visibleContent.removeClass('selected');
selectedContent.attr('class', 'selected');
//now show the next content, with 3 subsequent steps (Showing only one for the sake of readability)
selectedContent.find('...').first().animate({
opacity: 1
}, 500, function() {
detectScroll();
});
});
});
}
那么使用'.stop()'来停止旧的动画呢? – Deckerz
您是否尝试使用文档准备功能注册您的动画功能,以便在页面委托您想要的任何事件时完成动画并启动新的动画功能? –
@Deckerz我曾尝试使用.stop(),在动画功能的开始,而不是分离(),但我有一个类似的行为,它的工作原理是第一次,然后如果我继续滚动快,下内容全部显示在一起。顺便说一下,这不是我想要的行为,我更愿意“等待”内容完全显示。任何线索? – sissy