2016-11-04 8 views
-1

私はサイズ変更イベントを待ち受けるために、イベントリスナーをウィンドウに追加しています。基本的には、ブラウザの幅が768pxを下回ったときに'center'クラスを削除してから、768px以上になったときに追加したいと思います。JavaScript:クラスを削除した後、 'サイズ変更'イベントにクラスを追加するにはどうすればよいですか?

window.addEventListener('resize', function() { 
    var width = 0, 
     doc = document, 
     div = doc.getElementsByTagName('div'), i; 
    if (window.innerHeight) { 
     width = window.innerWidth; 
    } else if (doc.documentElement && doc.document.documentElement.clientHeight) { 
     width = doc.documentElement.clientWidth; 
    } else if (doc.body) { 
     width = doc.body.clientWidth; 
    } 
    if (width < 768) { 
     for (i = 0; i < div.length; i++) { 
      div[i].classList.remove('center'); 
     } 
    } else { 
     div[i].classList.add('center'); 
    } 
}, false); 

これは正しく削除しますが、コンソールを確認するとすぐにこのエラーが発生します。 ...それは発症からそのエラーをログに記録する理由がわからない

index.html:591 Uncaught TypeError: Cannot read property 'classList' of undefined(…)

任意の助けに感謝!

+1

ただ、好奇心から、なぜあなたは、単にこれを行うにはCSSメディアクエリを使用していませんか? –

+0

CSSで '@media query 'を使用してみませんか? – TheValyreanGroup

+0

'doc.documentElement'は' doc.documentElement'に、if(window.innerHeight)はwindow.innerWidthを読むべき場所にあります。 – amdouglas

答えて

2

あなたはJSを必要としない、唯一のCSS:

.media { 
 
    background-color: blue; 
 
    } 
 
@media (max-width: 600px) { 
 
    .media { 
 
    background-color: red; 
 
    } 
 
}
<div class="media"> Hello world</div>

codepen

はここで読む程度media queries

+1

これは行く方法です。それは非常に複雑さを取り除きます。 –

+0

ありがとうございますが、要素を変更したいだけの場合は適用されます。この場合、私が探しているものを削除してください。 –

+0

"display:none;"のようなことがあります。 "background-color:red;"の代わりに "background-color:red;" –

0

あなたの場合で、あなたのループを台無しにしましたステートメント。

if (width < 768) { 
    for (i = 0; i < div.length; i++) { 
     div[i].classList.remove("center"); 
    } 
    } else { 
     div[i].classList.add("center"); 
    } 

は次のようになります。

for (i = 0; i < div.length; i++) { 
    if(width < 768) 
     div[i].classList.remove("center"); 
    } else { 
     div[i].classList.add("center"); 
    } 
} 
関連する問題