2017-12-21 11 views
0

ビューポートが特定の幅よりも大きい場合にのみWayPointを実行する方法はありますか?好ましくは、その幅がサイズ変更されるかどうかを確認するビューポートの幅が1000pxより大きい場合にのみWayPointを実行しますか?

通常はこのままにしておきますが、4つのセクションがあり、それらが表示されるときには.in-viewのクラスを追加してdiv内をアニメーション化できます。問題は(私は)モバイルでは私のセクションがスライドショー(Slickスライダ)で表示されるので、.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にリサイズされた場合、ウィンドウの幅がすでに1000ピクセルを超えていたとしても、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未満のときにクラスを削除できるのでしょうか?私は他の答えにあなたのコメントで興味があると私は少し私のページが少し重くなっている心配です!私は 'slick-current'と' in-view'の両方で同じスタイルを指定することができましたが、メディアのクエリを設定するだけでしたが、それは多くの作業のように思えますし、2つのコードを維持する必要があります。それがもっとうまくいくかどうか? – user1406440

+0

'switchWayPoints()'メソッドはウィンドウのサイズ変更イベントを使用するのとは異なり、ウィンドウが1000pxギャップ(過大と下限、両方)を通過する場合にのみ呼び出されます。だから、それはより良いパフォーマンスを発揮します。今については: ''私はスリックカレントとビューの両方で同じスタイルを指定することができますが、セットメディアクエリーのためだけですが、それはたくさんの仕事のようです "** - > **あなたのことを理解していない平均? –

+0

EDIT:私は未定義の変数を修正するコードを更新しました –

関連する問題