2012-03-27 5 views
0

"inview"사용자 지정 이벤트 (https://github.com/protonet/jquery.inview)에 의해 트리거 될 때 동적으로로드되는 콘텐츠 (Infinite Scroll 스크립트를 통해 http://www.infinite-scroll.com/)를 지정하려고합니다.Infinite Scroll + .on() function trouble

내 코드는 다음과 같습니다

$(document).on("inview", ".attachment-portfoliosmall", function(e) { 
    if($.data(this, "styleappended")) { 
    return true; 
    } 
    $.data(this, "styleappended", true); 
    $(".attachment-portfoliosmall").css('visibility','visible').hide().fadeIn('slow'); 
    $(".attachment-portfoliosmall").parent(".portfoliopreload").css("background", "none"); 
}); 

당신은 분명히 볼 수 있듯이, $ .DATA 루틴은 CSTE 연구진() 이벤트 핸들러가 두 번 이상 실행되지 않도록하기 위해 사용된다 선택 필터의 각 요소

이 코드는 다음 페이지의 동적으로로드 된 내용이 문서에 추가되면 .on() 루틴이 새로 추가 된 요소가 아닌 모든 단일 요소에서 두 번 실행됩니다 추가 요소. hxxp :이 코드는 라이브가 어디

당신은 내가 내 웹 사이트로 이동하여 무슨 뜻인지 볼 수 있습니다 다음 페이지로 이동하면 //www.riddlepark.fm/

, 당신은 모든 요소가 퇴색 볼 수 있습니다 .on() 이벤트 핸들러로 인해 발생하는 다시 시작 및 다시 시작.

어떻게 이전 페이지의 이전에 처리 된 요소에서 실행되지 않도록 할 수 있습니까?

+0

엘리먼트 클래스에 'loaded'를 추가하고 필터링하는 것을 고려 했습니까? –

+0

코드에서 그 사실을 실증 해 주시겠습니까? :) 나는 아주 새로운 javascript와 심지어 무언가 간단합니다. –

답변

0

여기 내 의견에 의미가 있습니다.

$(document).on("inview", ".attachment-portfoliosmall", function(e) { 
    var $this = $(this); 
    if(!$this.hasClass('loaded')) { 
     $this.addClass('loaded'); 
     $this.css('visibility','visible').hide().fadeIn('slow'); 
     $this.parent(".portfoliopreload").css("background", "none"); 
    } 
}); 

그게 뭔가 효과가 있을지도 모릅니다.

+0

고마워, 그 효과가있는 것 같다! 더 좋게도, 이제는 페이지의 모든 요소가 한꺼번에로드되는 대신 원하는 요소 만로드됩니다. 완전한! 이제 이것이 크로스 브라우저 호환이되는지 확인하십시오. * 한숨 * –