선택한 날짜에 따라 다른 내용을 표시하는 타임 라인이 있습니다. 타임 라인을 클릭하거나 마우스 휠로 스크롤하여 날짜를 선택할 수 있습니다. 서로 다른 콘텐츠 요소의 페이드 아웃/페이드 효과를 얻기 위해 각 콘텐츠에 일부 애니메이션이 첨부되어 있습니다.이 경우 중첩 된 애니메이션과 콜백이 사용됩니다.jQuery로만 처음으로 작업하는 이벤트 분리
내가 할 수없는 일은 빨리 움직이는 경우 다음 애니메이션이 시작되기 전에 이전 애니메이션이 끝날 때까지 기다리는 것입니다. 아니면 더 나은 애니메이션 함수 시작 부분에서 스크롤 이벤트를 분리하고 마지막으로 animate
함수 호출의 콜백으로 다시 첨부합니다.이 함수는 처음에만 작동하지만 후속 스크롤에서는 작동하지 않습니다.
아이디어가 있으십니까?
함수 검출 스크롤 : detatching jumpToEvent 함수 호출 애니메이션
function detachScroll(){
console.log('detach');
$('.events-content').first().unbind('mousewheel');
$('.events-content').first().off('DOMMouseScroll');
}
기능, 스크롤링
//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');
}
});
}
기능, 즉 표시하는 정확한 콘텐츠를 선택
//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 나는 detach() 대신에 애니메이션 함수의 시작 부분에 .stop()을 사용하려고 시도했으나 비슷한 동작을한다. 처음 작동하는데, 그 다음엔 빠르게 스크롤하면 다음 콘텐츠가 모두 함께 표시됩니다. 그런데 그것은 내가 원하는 행동이 아니기 때문에 내용이 완전히 보일 때까지 "기다리기"를 원합니다. 어떤 단서? – sissy