こちらのフラッシュカードのコードで、
html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 9 <style> 10 body { 11 margin: 0; 12 background: #e0e0e0; 13 text-align: center; 14 font-family: Verdana, sans-serif; 15 color: #fff; 16 } 17 18 #btn { 19 width: 200px; 20 margin: 0 auto; 21 padding: 7px; 22 border-radius: 5px; 23 background: #00aaff; 24 box-shadow: 0 4px 0 #0088cc; 25 cursor: pointer; 26 } 27 28 #btn:hover { 29 opacity: 0.8; 30 } 31 32 #card { 33 margin: 60px auto 20px; 34 width: 400px; 35 height: 100px; 36 cursor: pointer; 37 font-size: 38px; 38 line-height: 100px; 39 perspective: 100px; 40 transform-style: preserve-3d; 41 transition: transform 0.8s; 42 } 43 44 #card-front, 45 #card-back { 46 width: 100%; 47 height: 100%; 48 border-radius: 5px; 49 position: absolute; 50 backface-visibility: hidden; 51 } 52 53 #card-front { 54 background: #fff; 55 color: #333; 56 } 57 58 #card-back { 59 background: #00aaff; 60 transform: rotateY(180deg); 61 } 62 63 .open { 64 transform: rotateY(180deg); 65 } 66 </style> 67</head> 68 69<body> 70 <div id="card"> 71 <div id="card-front"></div> 72 <div id="card-back"></div> 73 </div> 74 <div id="btn">NEXT</div> 75 76 77 <script> 78 (function () { 79 'use strict'; 80 81 let words = [ 82 { 'en': 'read', 'ja': '読む' }, 83 { 'en': 'write', 'ja': '書く' }, 84 { 'en': 'eat', 'ja': '食べる' }, 85 { 'en': 'run', 'ja': '走る' }, 86 { 'en': 'walk', 'ja': '歩く' } 87 ]; 88 89 let card = document.querySelector('#card'); 90 let cardFront = document.querySelector('#card-front'); 91 let cardBack = document.querySelector('#card-back'); 92 let btn = document.querySelector('#btn'); 93 94 card.addEventListener('click', function () { 95 flip(); 96 }); 97 btn.addEventListener('click', function () { 98 next(); 99 }) 100 101 function next() { 102 if (card.className === 'open') { 103 flip(); 104 card.addEventListener('transitionend', setCard); 105 } else { 106 setCard(); 107 } 108 } 109 110 function setCard() { 111 let num = Math.floor(Math.random() * words.length); 112 cardFront.innerHTML = words[num]['en']; 113 cardBack.innerHTML = words[num]['ja']; 114 card.removeEventListener('transitionend', setCard); 115 } 116 117 setCard(); 118 119 window.addEventListener('keyup', function(e) { 120 // e.keyCode f:70, n:78 121 // console.log(e.keyCode); 122 if(e.keyCode === 70) { 123 flip(); 124 } else if(e.keyCode === 78) { 125 next(); 126 } 127 }); 128 129 function flip() { 130 card.className = card.className === '' ? 'open' : ''; 131 } 132 })(); 133 </script> 134</body> 135 136</html>
こちらの単語帳のコードで作ったローカルストレージのデータを使いたく、90~103行をフラッシュカードのコードにコピーしてみたのですが上手くいかなかったです。どうしたら良いでしょうか?。よろしくお願いします。
ローカルストレージのデータをファイルに移したり出来ますか?それをどう使うか分かりませんが
html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>単語帳</title> 8</head> 9 10<body> 11 <h1>プログラミング必須英単語600+</h1> 12 <input type="text" placeholder="単語"> 13 <input type="text" placeholder="意味"> 14 <button id="btn">登録</button> 15 <p id="total">全0件</p> 16 <table> 17 <thead> 18 <tr> 19 <th>単語</th> 20 <th>意味</th> 21 </tr> 22 <tr> 23 <td colspan=2 id="class">BASIC 300</td> 24 </tr> 25 </thead> 26 <tbody id="table"></tbody> 27 </table> 28 29 30 <style> 31 h1 { 32 font-family: "Yu Gothic"; 33 } 34 35 /*idにテーブルがついている要素*/ 36 table { 37 /* テーブルの境界線を重ねて表示し、隣接するセルの境界線を1本にまとめる */ 38 border-collapse: collapse; 39 } 40 41 /*td要素とth要素*/ 42 td, 43 th { 44 /*1px実践の罫線(色は#333)*/ 45 border: 1px solid #333; 46 /*上下0 左右10pxのパディング*/ 47 padding: 0 10px; 48 /*テキストを中央揃えにする */ 49 text-align: center; 50 } 51 52 th { 53 background: #0000ff; 54 /*文字色を白に設定*/ 55 color: white; 56 } 57 58 #class { 59 background: pink; 60 } 61 </style> 62 63 64 <script> 65 'use strict'; 66 67 //文書が読み込み終わったら処理を実行 68 window.onload = () => { 69 class Word { 70 //コンストラクター 71 constructor(en, ja) { 72 this.en = en; 73 this.ja = ja; 74 } 75 76 //メソッド 77 showInfo() { 78 return `<td>${this.en}</td><td>${this.ja}</td>`; 79 } 80 } 81 82 //input要素をNodeListとして取得 83 const inputs = document.querySelectorAll('input'); 84 //セレクタをもとに要素を取得 85 const btn = document.querySelector('#btn'); 86 const total = document.querySelector('#total'); 87 const table = document.querySelector('#table'); 88 89 //空の配列を準備 90 let list = []; 91 92 //localStorageからwordsというキーがついた項目を取得 93 const loadData = localStorage.getItem('words'); 94 95 //データがあれば 96 if (loadData !== null) { 97 //取得したJSON形式のデータをオブジェクトの配列に変換 98 const words = JSON.parse(loadData); 99 //配列から1件ずつwordとして取り出す 100 words.forEach((word) => { 101 //listにWordインスタンスを追加 102 list.push(new Word(word.en, word.ja)); 103 }); 104 updateTable(); 105 } 106 107 //btnにクリックイベントを登録 108 btn.addEventListener('click', () => { 109 // 入力値を取得(前後についた無駄なスペースを除去) 110 const enValue = inputs[0].value.trim(); 111 const jaValue = inputs[1].value.trim(); 112 113 if (enValue === '' || jaValue === '') { 114 alert('単語と意味を両方入力してください。'); 115 return; // 入力が不正な場合は処理を中断 116 } 117 118 //Wordインスタンスを作成 119 let word = new Word(enValue, jaValue); 120 //インスタンスを配列に追加 121 list.push(word); 122 //すべてのinput要素を空欄にする 123 inputs.forEach((input) => { 124 input.value = ''; 125 }); 126 updateTable(); 127 //配列の単語リストをJSON形式に変換し、localStorageに保存 128 localStorage.setItem('words', JSON.stringify(list)); 129 }); 130 131 function updateTable() { 132 //内容をクリア 133 table.innerHTML = ''; 134 135 //配列から1件1件取り出しながら処理を行う(取り出した1件をwordとして扱う) 136 list.forEach((word) => { 137 //tr要素を作成 138 let tr = document.createElement('tr'); 139 //trの子要素をhtmlが含まれた文字列で設定 140 tr.innerHTML = word.showInfo(); 141 //table要素の子要素として作成したtr要素を追加 142 table.appendChild(tr); 143 }); 144 145 //total要素のテキストコンテントを設定 146 total.textContent = `全${list.length}件`; 147 } 148 149 updateTable(); 150 console.log(list); 151 }; 152 </script> 153 154</body> 155 156</html>
回答1件
あなたの回答
tips
プレビュー