2014-12-03 8 views
2

Velocity.js 및 jquery.inview를 가지고 놀고 있습니다. 내 페이지의 모든 제목을 볼 때 slideDownIn으로 지정합니다. 이 코드는 첫 타이틀을 위해 잘 작동 :여러 요소에서 'inview'이벤트에 바인딩하는 방법

$('.movies-title').bind('inview', function(event, isInView, visiblePartX, visiblePartY) { 
    if (isInView) { 
    // element is now visible in the viewport 
    if (visiblePartY == 'top') { 
     // top part of element is visible 
    } else if (visiblePartY == 'bottom') { 
     // bottom part of element is visible 
    } else { 
     // whole part of element is visible 
     $(this).velocity("transition.slideDownIn", 500);  
    } 
    } else { 
    // element has gone out of viewport 
    $(this).velocity("reverse"); 
    } 
}); 

내가 복사하고 위의 여러 번 붙여 다른 타이틀의 클래스와 .movies-title를 교체하는 경우, 내가 원하는대로 작동.

그러나 이것은 많은 추가 코드처럼 보입니다. $('.movies-title')$(.movies-title, .tv-title, .books-title)으로 변경하려고 시도했지만 애니메이션은 목록의 마지막 요소에서만 작동합니다. 또한 모든 타이틀에 .title이라는 새 클래스를 추가하고 .movie-title.title으로 변경하려고했지만 그 중 하나도 작동하지 않았습니다.

내가 뭘 잘못하고 있니? 어떻게 코드를 압축 할 수 있습니까?

+1

바이올린는 것 만약 당신이 좀 더 구체적인 도움을 원한다면 정말로 도움이 될 것입니다. – ajmajmajma

+0

여기에 가세요 : http://jsfiddle.net/regularmegs/d1g7sLxq/ – mcography

답변

1

배수에 대해 bind 대신 대리자를 사용해보십시오.

$('body').delegate('.title','inview', function(event, isInView, visiblePartX, visiblePartY) { 

편집 - - 또한 그들 모두 (I 바로 사용 제목)이 같은

위한 통합 클래스를 만들 죄송 연결 잘못된 바이올린을 처음

볼 바이올린 http://jsfiddle.net/d1g7sLxq/3/

+0

감사합니다. 솔루션이 왜 작동하고 원래 코드가 왜 작동하지 않았는지 설명 할 수 있습니까? 델리게이트와 바인드의 차이점은 무엇입니까? – mcography

+0

문제가 없습니다! 바인드는 단일 이벤트 만 바인딩하는 반면 대리자는 이벤트 리스너를 추가합니다. – ajmajmajma

+0

@ajmajmajma 잠깐, 여러 요소에'click'과 같은 표준 이벤트와 잘 작동하면'.on()'이이 기능을 사용하지 않는 이유는 무엇입니까? 이것은'inview' 이벤트의 구현 세부 사항 때문인가요? – OneHoopyFrood

2

가장 좋은 해결책은 공통점이 있기 때문에 각 요소에 단일 클래스를 사용하는 것입니다. title을 클래스 유형으로 추가하고 해당 클래스에 적용하면됩니다.

<div class="title movie-title"></div> 

내가이 문제에 대해 언급 한 것을 알고 있지만 왜 이것이 작동하지 않는지 알 수 없습니다.

+0

동의합니다 ... 당신이 원하는 모든 객체에 같은 클래스를 추가해야합니다. 조작하다 n 단일 jQuery 선택 항목입니다. – rfornal

+0

맞아, 나는 그것을 시도하고 그것은 작동하지 않았다 ... – mcography

+1

그것이 작동해야합니다, 무슨 뜻인지 설명하십시오. – OneHoopyFrood