2017-12-21 15 views
0

뷰포트가 특정 너비보다 큰 경우에만 WayPoint를 실행하는 방법이 있습니까? 가급적이면 크기가 변경 될 때 너비가 바뀌는 지 확인 하시겠습니까?뷰포트 너비가 1000px보다 큰 경우 WayPoint 만 실행 하시겠습니까?

일반적으로 나는이 부분을 남겨두고 싶습니다.하지만 4 개의 섹션이 있으며, 그들이 볼 수있게되면 .in-view 클래스를 추가하여 divs에 애니메이션을 적용 할 수 있습니다. 문제는 (내 생각에) 모바일 섹션에서 슬라이드 쇼 (슬릭 슬라이더)로 표시되므로 .slick-current에서 동일한 애니메이션/전환 스타일링을 사용하고 때로는 작동하지 않는 경우가 있는데 이는 요소를 .in-view으로 설정했기 때문일 수 있습니다. ?

$(document).ready(function(){ 
    var waypoints = document.querySelectorAll('.showcase__item'); 
    for (var i = waypoints.length - 1; i >= 0; i--) { 
     var waypoint = new Waypoint({ 
      element: waypoints[i], 
      handler: function(direction) { 
       this.element.classList.toggle('in-view'); 
      }, 
      offset: '60%', 
     }); 
    } 
}); 

...이 가능한가요 그것도 좋은 생각이다 :

이것은 내가 사용하고 코드는? 이것이 성과에 얼마나 스트레스가 될지 잘 모르겠습니까?

답변

1

$(window).resize()$(window).width();을 확인할 수 있습니다. $(window).resize() 이벤트는 브라우저 창의 크기가 변경되면 창 요소로 보내지고 $(window).width();은 현재 창의 너비를 가져옵니다. 다음은 코드의 스 니펫입니다.

$(document).ready(function(){ 
    $(window).resize(function() { 
     width=$(window).width(); 
     if (width > 1000){ 
      var waypoints = document.querySelectorAll('.showcase__item'); 
      for (var i = waypoints.length - 1; i >= 0; i--) { 
       var waypoint = new Waypoint({ 
        element: waypoints[i], 
        handler: function(direction) { 
         this.element.classList.toggle('in-view'); 
        }, 
        offset: '60%', 
       }); 
      } 
     } else { 
      // Your logic when the screen size is less then 1000 px. 
      if ($("#someID").hasClass("classname")) { 
       $("#someID").removeClass("classname"); 
      } 
     } 
    }); 
}); 
+0

감사 남자, 나는 이것이 시도주지! 클래스가 이미 추가 된 경우 클래스가 제거됩니까? 나는 짐작하지 않는다. 그러나 그것은 더 큰 것이 아니다! – user1406440

+1

창 크기를 조정할 때마다 (또는 DOM 내부의 요소) 각 픽셀에 대해 (일부 패딩은 있지만 ...)이 이벤트가 발생합니다. 이 경우 창 크기가 1020에서 1040으로 조정 된 경우 (예 : 창 너비가 이미 1000px 이상인 경우에도 약 20 번 호출됩니다)을 의미합니다. 그래서 플러그인을 아무 것도하지 않고 20 번 다시 초기화합니다. 거기에 사용할 수 없습니다. –

+0

나는 위대한 일을했다고 말할 것입니다.하지만 콘솔이 열리기 전까지는 클래스가 아무 것도하지 않는 것 같습니다. 닫을 때 모든 것이 다시 사라졌습니다. 많은 div에는 'opacity : 0;'이있어서 클래스가 추가 될 때만 표시됩니다. :/ – user1406440

1

난 정말이 플러그인을 모르지만 그것은 window.matchMedia().addListener() 방법을 사용하여 가능한 것, 그것은 이벤트의 크기를 조절 창으로 결합보다 더 나은 것입니다. 그런 다음 웨이 포인트 플러그인을 활성화/비활성화 할 수 있습니다. 그건 그렇고, 당신은 jQuery의 방법을 사용하여 플러그인을 초기화해야합니다.

은 다음 코드는 테스트되지 않았습니다 :

var widthMatch = window.matchMedia("(min-width:1000px)"); 
var waypoints; 

widthMatch.addListener(function(e) { 
    switchWayPoints(e.matches); 
}); 

function switchWayPoints(enable) { 
    waypoints[enable ? "enableAll" : "disableAll"](); 
} 

$(document).ready(function() { 
    waypoints = $('.showcase__item').waypoint(function(direction) { 
    // -> Seem strange to call it here without any direction check?! ->$(this).toggleClass('in-view'); 
    }, { 
    offset: '60%' 
    }); 

    switchWayPoints(widthMatch.matches); 
}); 
+0

나는 CodePen을 사용하려고 노력할 것입니다. 브라우저가 1000px 이하일 때 클래스를 제거 할 수 있습니까? 나는 다른 대답에 대한 귀하의 의견에 관심이 있습니다. 그리고 저는 제 페이지가 약간 무거워지고 있다는 것에 조금 염려합니다! 나는 슬릭 - 현재와 인 - 뷰 모두에서 동일한 스타일을 지정할 수 있지만 미디어 - 쿼리를 설정할 때만 가능합니다.하지만 그것은 많은 일처럼 보입니다. 그리고 두 가지 코드를 유지해야 할 필요가 있습니다. 더 나은 실적을 거두려면? – user1406440

+0

'switchWayPoints()'메서드는 window resize 이벤트를 사용하는 것과는 달리, 윈도우가 1000px 간격 (over와 lower, both)을 통과 할 때만 호출됩니다. 그래서 나중에 더 잘 수행 될 것입니다. 이제는 다음과 같은 내용을 다루었습니다 : "나는 똑같은 스타일을 매끄러운 - 현재와 -보기 모두에서 지정할 수 있지만 설정 한 미디어 - 쿼리에 대해서만 할 수 있습니다. 그러나 그것은 많은 일처럼 보입니다."** - ** ** 나는 당신을 이해하지 못합니다. 평균? –

+0

편집 : 정의되지 않은 변수를 수정하기 위해 코드를 업데이트했습니다. –