2016-12-25 11 views
3

メノラを作成して、ボタンをクリックしてキャンドルを照らし、キャンドルを5秒ごとに短くしたい(この値は変更可能です)。私はアニメーションに立ち往生しています。 divのプロパティ(高さなど)にアクセスして、キャンドルのライトを移動する必要があることを理解していますが、どうやってそれを行うことはできません。divのプロパティを動的に変更する

ここに私のコードは、これまでのところです:

var lightOn = document.createElement("BUTTON"); 
 
lightOn.textContent = "Light Menorah!"; 
 
document.body.appendChild(lightOn); 
 
lightOn.onclick = setInterval (candleLight,1000); 
 
function candleLight() { 
 
    document.getElementsByClassName("candles").innerHTML = style.height-10; 
 
    }
.candles { 
 
    background-color: blue; 
 
    width: 35px; 
 
    height: 90px; 
 
    margin-right: 10px; 
 
    float: left; 
 
    } 
 
    .mainCandle { 
 
    background-color: blue; 
 
    width: 35px; 
 
    height: 120px; 
 
    margin-right: 10px; 
 
    float: left; 
 
    } 
 
    .light { 
 
    background-color: yellow; 
 
    width: 35px; 
 
    height: 40px; 
 
    float: left; 
 
    margin-right: 10px; 
 
    } 
 
    #theLight { 
 
    } 
 
    #theCandle { 
 
    display:block; 
 
    position: relative; 
 
    padding-top: 40px; 
 
    }
<div id = "theLight"> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
</div> 
 
<div id = "theCandle"> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "mainCandle"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
</div>

+1

アリス、あなたはJSFiddleを作成することができます"px"を文字列から削除して救済されますか?ハッピーチャヌークカとメリークリスマスの皆さん! –

答えて

3

ハッピーハヌカアリス!

getElementsByClassNameから取得したすべての要素を調べる必要があります(この関数は要素のリストを返しますので、実際には.innerHTMLを使用することはできません)。それぞれの要素の高さを変更する必要があります要素。

その他の問題は、外部CSSファイルを使用して高さを設定した場合、要素のstyle.heightを使用できないことです。 getComputedStyle機能を使用する必要があります。

すべての問題は修正されませんが、それはあなたに良いスタート(そして他のすべてを解決する一般的な方法)を与えるでしょう。

位置の問題を修正する必要があります。

var lightOn = document.createElement("BUTTON"); 
 
    lightOn.textContent = "Light Menorah!"; 
 
    document.body.appendChild(lightOn); 
 
    lightOn.onclick = function() { 
 
    setInterval (candleLight,1000); 
 
    } 
 
    function candleLight() { 
 
    Array.prototype.forEach.call(
 
    document.getElementsByClassName("candles"), function(e) { 
 
     height = window.getComputedStyle(e,null).getPropertyValue("height") 
 
     if (parseInt(height)) { 
 
     e.style.height = (parseInt(height)-10) + 'px'; 
 
     } 
 
    }) 
 
    }
.candles { 
 
    background-color: blue; 
 
    width: 35px; 
 
    height: 90px; 
 
    margin-right: 10px; 
 
    float: left; 
 
    } 
 
    .mainCandle { 
 
    background-color: blue; 
 
    width: 35px; 
 
    height: 120px; 
 
    margin-right: 10px; 
 
    float: left; 
 
    } 
 
    .light { 
 
    background-color: yellow; 
 
    width: 35px; 
 
    height: 40px; 
 
    float: left; 
 
    margin-right: 10px; 
 
    } 
 
    #theLight { 
 
    } 
 
    #theCandle { 
 
    display:block; 
 
    position: relative; 
 
    padding-top: 40px; 
 
    }
<div id = "theLight"> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
    <div class = "light"></div> 
 
</div> 
 
<div id = "theCandle"> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "mainCandle"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
    <div class = "candles"></div> 
 
</div>

何かがまだ明らかではない場合 - お問い合わせ下さい:)

+1

ありがとう、私は位置を修正しようとします。私は本当に論理部分に立ち往生していたので、あなたの説明は非常に便利です! –

2

をここでは、ろうそくを縮小するために必要なロジックです。 setIntervalはそれを定期的に行います。

var candles = undefined; 
function candleLight() { 
    if (candles === undefined) { 
     candles = document.getElementsByClassName("candles") 
    } 

    for (var candleIndex in candles) { 
     candles[candleIndex].style.height = parseInt(candles[candleIndex].style.height.replace("px", "")) + "px"; 
    } 
} 

あなたの過ちであった:

  • document.getElementsByClassNameは、要素と、自分の要素の配列を返すheightを持ってstyleメンバーを持っている、また、innerHTMLを持っていますが、配列自体は持っていません。これら
  • は、あなたのheight I以来innerHTML
  • height値を割り当てるために論理的な間違いでしたピクセルで測定した場合、確かに"px"で終わり、テキストデータです。したがって、あなたはそこから10を引くことはできません。これは私のコードの提案では、私は文字列から
+0

あなたは今...ここにあるものはすべて私の答えに既に存在しています:)あなたはちょうどそれを投票することもできます – Dekel

+0

@Dekel getElementsByClassNameはリストではなく配列を返します。私の説明もより詳細です。それにもかかわらず、私はずっと前にあなたの答えをupvotedしています。 –

+1

返信ありがとう@LajosArpad :)実際には、 'getElementsByClassName'関数は配列のようなオブジェクトを返します(まさに配列ではないので、私はそのオブジェクトの上の私の例で' forEach'を使うことができませんでした。なぜ私は 'list'という単語を使ったのか)。投票ありがとう!あなたも私のものを持っています:) – Dekel

関連する問題