凄く初歩的なプログラムかもしれませんが、
行き詰まっています。。。
■やりたいこと
クリックするたびに、
カウントを0~5まで、ひとつずつ増やしていき、
5まできたらひとつずつ減らしたい。
それの繰り返し。
5までいったら、0に戻すのは出来たが、
逆順の方法がわからないので、
どなたか教えてください!!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
以下のように行ってはいかがでしょうか?
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>タイトル</title> 6</head> 7<body> 8<button type="button" id="button1">クリック</button> 9<script> 10 var count = 0, addnum = 1; 11 document.getElementById("button1").addEventListener("click", function () { 12 this.textContent = count; 13 count = count + addnum; 14 addnum = (count >= 5 || count <= 0) ? (addnum = -1 * addnum) : addnum; 15 }, false); 16</script> 17</body> 18</html>
投稿2017/06/10 09:14
総合スコア14731
0
おもしろそうなので、考えてみました
初期値の設定ができて、そのあとは ただ呼び出すだけで動作するバージョンです
javascript
1// Define functions 2upDownCycleNumber = function(cycleLength) { 3 // Setup function 4 // Create an array like: 5 // [0, 1, 2, 3, 4, 5, 4, 3, 2, 1] 6 createUpDownCyclesArray = function(cycleLength) { 7 // Create an array like: 8 // [0, 1, 2, 3, 4, 5] 9 incrementalArray = 10 Array.apply(null, Array(cycleLength + 1)) 11 .map(function(_, i) { return i }) 12 13 // Create an array like: 14 // [0, 1, 2, 3, 4, 5] => [4, 3, 2, 1] 15 decrementalArray = 16 (function(incrementalArray){ 17 decrementalArray = incrementalArray.slice().reverse() 18 decrementalArray.shift() 19 decrementalArray.pop() 20 21 return decrementalArray 22 })(incrementalArray) 23 24 return incrementalArray.concat(decrementalArray) 25 } 26 27 self = this // for refer outer context of `this` from inner context 28 29 this.cycleValues = createUpDownCyclesArray(cycleLength) 30 this.index = 0 31 32 // Closure function 33 return function() { 34 return self.cycleValues[self.index++ % self.cycleValues.length] 35 } 36} 37 38cycleLength = 5 39cycleValues = new upDownCycleNumber(cycleLength) 40 41for(i = 0; i < 20; i++) { 42 console.log(cycleValues()) 43} 44// => 45// 0 46// 1 47// 2 48// 3 49// 4 50// 5 51// 4 52// 3 53// 2 54// 1 55// 0 56// 1 57// 2 58// 3 59// 4 60// 5 61// 4 62// 3 63// 2 64// 1
これをHTML と絡めて組み込むことができれば、期待する動作が得られるのではないでしょうか
何か参考になれば幸いです
Link
投稿2017/06/10 12:41
編集2017/06/11 01:53総合スコア2321
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ポイントは、「現在カウントアップ中かカウントダウン中か」という状態が増えたことです。
「カウントアップ中かカウントダウン中か」を覚えておく変数を用意すると整理しやすいと思います。
(function() { 'use strict'; var count = 0, countUp = true, btn = document.getElementById('button'), result = document.getElementById('result'); function onClick() { countUp = (function() { // countが5以上になったらカウントダウン状態に、 // countが0以下になったらカウントアップ状態に切り替える。 // それ以外の値(1~4)では、カウントの状態を変更しない。 if(count >= 5) { return false; } if(count <= 0) { return true; } return countUp; })(); // 現在カウントアップ中なら1プラス、カウントダウン中なら1マイナス count += countUp ? 1 : -1 result.value = count; } btn.addEventListener('click', onClick); })();
投稿2017/06/10 11:25
総合スコア267
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
みなさまご回答ありがとうございます!
少し投げやり感がありすみません。。。
お知恵おお貸しして頂き本当に勉強になりました!
解答を参考に自分なりにも書いてみました。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>タイトル</title> <script src="https://code.jquery.com/jquery-3.1.0.min.js"></script> </head> <body> <button type="button" id="button1">クリック</button> <script> $(function(){ var flg = true; var count = 0; function counter(){ console.log(count); if(flg){ count++; if(count >= 5){ flg = false; } }else{ count--; if(count <= 0){ flg = true; } } } $('#button1').on("click",counter); }); </script> </body> </html>
投稿2017/06/11 04:05
総合スコア13
0
すみません、これは間違いです。。。。
投稿2017/06/10 09:15
編集2017/06/10 09:18総合スコア525
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私も少しこの問題に興味があるので、静観しますww
初心者なので、こういうロジック考えるのがまだまだできておらず、、、
ちなみに、ボタンの文字を変えるのはアリですか?
Javascript
1<div id="result">0</div> 2 <div id="btn">UP</div> 3 4 <script> 5 (function() { 6 'use strict'; 7 var btn = document.getElementById('btn'); 8 var num = 0; 9 var result = document.getElementById('result'); 10 11 btn.addEventListener('click', function() { 12 if(btn.innerHTML === 'UP') { 13 num++; 14 if(num >= 6) { 15 btn.innerHTML = 'DOWN'; 16 } 17 } 18 if(btn.innerHTML === 'DOWN') { 19 num--; 20 if(num === 0) { 21 btn.innerHTML = 'UP'; 22 } 23 } 24 result.innerHTML = num; 25 }); 26 27 })(); 28 </script>
投稿2017/06/10 09:13
総合スコア525
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。