忍者ブログ

からすまる日誌 JavaScript

基本(16) forでリストを生成/カラーパレットを作る(1)

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

基本(16) forでリストを生成/カラーパレットを作る(1)

for文を使ってこの4つの項目をリストに入れてください。
からあげは消す。
 

for文のなかのiも、宣言なく使うのはお行儀が悪いらしい。
for(var i=0; i<foods.length; i++){
と書いてしまってもいい。
 
--->回答
 
<script>
var foods = ['おにぎり','カレー','餃子','ラーメン'];
var ul = document.getElementById('chart');
for(var i=0; i<foods.length; i++){
 var ele = document.createElement('li');//リストアイテムを新規作成
 ele.innerHTML = foods[i];//配列からn番目を呼び出し、その内容を生成したリストに入れる
 ul.appendChild(ele);//ulに子要素eleを追加
}
</script>
 

配列は常にブラケット[]を使って、号車番号(インデックス)でアクセスする。
 

さて作りたいのは色のコード。
216色ぶんも#CFFとか配列に入力してられない。
 
#の次に続くのは0,3,6,9,C,Fと仮定して、
var foodsをvar cnumに変えてfor文のなかもcnumに。
 

 
#000 -> #003 -> #006 #009 #00c #00fと表示させたい。
末尾だけ配列から拾ってこればいい。
文字列結合して、最後のとこだけくっつけよう。
 
ついでにワンアクション置いて色コードを変数に入れておこう。
同じ色コードを文字だけじゃなく背景色にもしたいから。
 

すべての要素オブジェクトは、スタイルシートで定義可能な全プロパティにアクセスできる。
 
ただスタイルシートはなにかとハイフンで表現する
しかしjsはハイフンはマイナスととらえてエラーになる。
js上でスタイルシートの表現をするときはハイフンをドット?キャメルケース?に直さないといけないらしい(どっちか聞き落とした)
 
→ほかのサイトより:
>この時に、CSSプロパティはキャメルケースで記述しなければいけないので注意が必要です! 例えば、「font-size」を指定したければ「style.fontSize」と記述する必要があるわけです。
 
キャメルケースかな?

文字を見やすくしてシャドウもいれて、
ボーダーの色も背景色にあわす。
 
 
--->ここまで
 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Web Safe Color</title>
<style>
body{
 background:#cfc;
}
#chart{
 list-style-type:none;
 padding:0;
 display:flex;
 flex-wrap:wrap;
}
#chart li {
 box-sizing:border-box;
 width: 16.66%;
 text-align:center;
 padding:1rem;
 border: solid 1px #cfc;
 text-shadow: 1px 1px 1px #fff;
 font-size: 1.4rem;
}
</style>
</head>
<body>
<ul id="chart">
</ul>
<script>
var cnum = ['0','3','6','9','C','F'];
var ul = document.getElementById('chart');
for(var i=0; i<6; i++){
 var ele = document.createElement('li');
 var code = '#00'+cnum[i];
 ele.innerHTML = '#00'+cnum[i];
 ele.style.background = code;
 console.log(code);
 ul.appendChild(ele);
}
</script>
</body>
</html>
 
 

しかしこれでは1行しかない。
もっと行数が欲しい。
ループの中にループを置きたいが
iだと混乱するから
いま動かしているのはblueなのでループカウンタをbに変える。5か所変更。
→for文を新たなfor文で包む。これはgreenを変化させる。ループカウンタはg
中身も#00に文字列接続してると変化しないので、'#0'+cnum[g]+cnum[b];とする
  
→さらに外側をfor文で包んで、今度はredを変化させる。ループカウンタはr
色コードの記述は'#'+cnum[r]+cnum[g]+cnum[b];となる。
 
--->できあがり
 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Web Safe Color</title>
<style>
body{
 background:#cfc;
}
#chart{
 list-style-type:none;
 padding:0;
 display:flex;
 flex-wrap:wrap;
}
#chart li {
 box-sizing:border-box;
 width: 16.66%;
 text-align:center;
 padding:1rem;
 border: solid 1px #cfc;
 text-shadow: 1px 1px 1px #fff;
 font-size: 1.4rem;
}
</style>
</head>
<body>
<ul id="chart">
</ul>
<script>
var cnum = ['0','3','6','9','C','F'];
var ul = document.getElementById('chart');

for(var r=0; r<6; r++){
 for(var g=0; g<6; g++){
  for(var b=0; b<6; b++){
   var ele = document.createElement('li');
    var code = '#'+cnum[r]+cnum[g]+cnum[b];
   ele.innerHTML = '#'+cnum[r]+cnum[g]+cnum[b];
   ele.style.background = code;
   console.log(code);
  ul.appendChild(ele);
   }
 }
}
</script>
</body>
</html>
 
 
PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R