2016-05-26 3 views
0

ウィンドウサイズが960px未満の場合にのみフォントの素晴らしいアイコンを表示したい場合は、この条件を追加します(window.matchMedia( "(max-width:960px)"))。jqueryを使ってウィンドウサイズを変更する

$(window).resize(function() { 
if (window.matchMedia("(max-width: 960px)").matches) { 
    $('li.has_children').prepend('<i class="fa fa-arrow-up"></i>'); 
    $('li.has_children').click(function (e) { 
      $(this).children('i').toggleClass("fa-arrow-up fa-arrow-down"); 
      $(this).children('ul.navi').toggle('1000'); 

      return false; 
    }); 
    } 
}).trigger("resize"); 

が、問題は、私はウィンドウのサイズを変更するとき、私は、複数のアイコンの代わりの1を持っていたということです:私はので、私はこのコードを持っているこのアイコンは、ウィンドウは960の下にサイズを変更されたときに消え、再び現れた960の上にウィンドウのサイズを変更します

+0

が、なぜ私が最初にこれでメディアクエリを使用して、この – pathfinder

+0

を行うには、CSSの@mediaを使用しない:{ 色の後:黒; コンテンツ: "\ f107"; font-family:FontAwesome; }問題は、クリックしたときにアイコンを変更したいとき、jqueryでコンテンツの後にCSSを取得できないということです。 –

答えて

1

jQuery.prepend()を使用しているため、複数のフォントですばらしいアイコンが表示されています。サイズを変更するたびに、スクリプトが実行され、もう1つアイコンが<li class="has_children">...</li>の前に追加されます。

修正するには、最初に削除して消えるようにする必要があります。コードはこの

$(window).resize(function() { 
    if (window.matchMedia("(max-width: 960px)").matches) { 
     // attempt to remove the icon before prepending it 
     $('li.has_children').children('i.fa.fa-arrow-up').remove(); 
     $('li.has_children').prepend('<i class="fa fa-arrow-up"></i>'); 
     $('li.has_children').click(function (e) { 
      $(this).children('i').toggleClass("fa-arrow-up fa-arrow-down"); 
      $(this).children('ul.navi').toggle('1000'); 

      return false; 
     }); 
    } 
}).trigger("resize"); 

JSFiddleのようになります。https://jsfiddle.net/j2o62a45/1/ `

+0

私はあなたのコードをテストしましたが、サイズを変更する度に複数フォントの素晴らしいアイコンが表示されます –

+0

@michellompret申し訳ありませんが、私は 'jQuery.remove()'を誤解しました。答えは更新され、今すぐ動作するはずです。 – user6384194

0

はい、コードには複数のアイコンが表示されます。

$('li.has_children').prepend('<i class="fa fa-arrow-up"></i>'); 

イベントの外でこのライブを移動して、アイコンが1つだけになるようにするか、または".fa .fa-arrow-up"'li.has_children'から削除することができます。いずれも動作します。

+0

このライブをイベント外に移動すると、サイズ変更は機能しません。ウィンドウが小さくなると、アイコンは表示されず、トグル効果は機能しません。 –

関連する問題