JavaScriptの繰り返しボタン:押した回数を数えて実行結果を元に戻すプログラム 結城永人 -2018年9月13日 サイトのボタンはHTMLのinputやbuttonとJavaScriptのonclickを組み合わせて実装できる。後者のプログラムが前者を押して発動するようになる。JavaScriptのonclickはイベントハンドラと呼ばれてHTMLのinputやbuttonの開始タグに他の属性と同じように記載すれば機能する。 onclick自体はHTMLの様々な要素に使えるから例えば画像のimgに組み込んだり、inputやbutton以外のデザインのボタンもspanなどにCSSを付けて作成できるだろう。 HTMLとJavaScriptでボタンを作成する 押すと画像が二枚目に切り替わる。 サンプルのソースコード HTML <img id="change-images" src="一枚目の画像URL" data-second-image="二枚目の画像URL"> <input type="button" value="ボタン" onclick="changer()"> JavaScript function changer(){ var chg = document.getElementById("change-images"); chg.setAttribute("src", chg.dataset.secondImage); } HTMLのinputのonclickからJavaScriptのfunctionが発動してサイトの画像タグのsrc属性の一枚目の画像URLをdata属性に用意した二枚目の画像URLへ置き換えるプログラムが実行されている。 このままだとボタンは、一回、押すと止まってしまって、二回目以降、押しても何も起きなくなるのが心許ない。 画像を切り替える場合など、ボタンで変更したコンテンツを元に戻せる方が全て閲覧可能だから利便性が高い。 方法を考えるともう一つ同じように二枚目から一枚目へと切り替えるボタンを追加するのが簡単で、ボタンを画像毎に対応させられる利点も持っているんだ。 しかしデザインによってボタンを一つだけしか表示したくない場合は複数枚を切り替えて使えるようにしなくてはならない。 functionで繰り返しボタンを作成する方法 0回 押すと回数を加算して表示する。 サンプルのソースコード HTML <p> <span id="press-button">0</span>回 </p> <input type="button" value="ボタン" onclick="counter()"> JavaScript var not = 0; function counter(){ not++; document.getElementById("press-button").innerHTML = not; } 変数の「not」にinputのonclickのfunctionから「++」で押した回数を一つ加算しながら表示している。 毎回、functionの実行結果が変わるから止まらずに使える繰り返しボタンになるんだ。 ボタンを押した回数を実行結果に割り当てる 押した分だけ二枚の画像を交互に切り替えて表示する。 サンプルのソースコード HTML <img id="repeat-images" src="一枚目の画像URL" data-second-image="二枚目の画像URL"> <input type="button" value="ボタン" onclick="repeater()"> JavaScript var notr = 0; var rpt = document.getElementById("repeat-images"); var dftr = rpt.getAttribute("src"); function repeater(){ notr++; if(notr % 2 !== 0) rpt.setAttribute("src", rpt.dataset.secondImage); else rpt.setAttribute("src", dftr); } ボタンのfunction内で、押した回数を捉えてからさらにifで条件付けて使用する画像URLを振り分けている。 二枚の画像に対してボタンを押した回数を2で割った余りが0かどうかの奇数と偶数を振り分ける条件式を通して前者ならば二枚目の画像、後者ならば一枚目の画像を表示するようにした。 ボタンを押す前のnotrと画像タグの内容のrptと画像URLのdrfrの三つの変数をfunctionの外側に初期値として記載している。 notrはfunction内側の「notr++」から一つずつ加算されてrptも「.setAttribute」からsrc属性がifの奇数で入れ替わるけれどもdftrは全く変更されないために、いい換えるとグローバル変数として一枚目の画像URLを格納し続けながらifの偶数で取り込まれる。 サンプルソースコードのJavaScriptはドット演算子を使うともっと短縮できるようになる。 var notr = 0; var rpt = document.getElementById("repeat-images"); var dftr = rpt.src; function repeater(){ notr++; if(notr % 2 !== 0) rpt.src = rpt.dataset.secondImage; else rpt.src = dftr; } 画像URLのsrc属性を入れ替えるsetAttributeメソッドのところをドット演算子の「.」に変更すると代入演算子の「=」によって必要な値を直ぐに変数へ送り込める。 ボタンを押した回数に三つ以上のコンテンツを繰り返して対応させるには必要なコンテンツを用意すると共に条件式によってそれぞれの実行結果が繰り返しても互いに被らないようにしなくてはならないので、二つよりも複雑になるけれどもJavaScriptのプログラミングは合計数以下の差し引きで判定するのが易しいだろう。 switchで複数のコンテンツを振り分ける方法 押した分だけ四枚の画像を次々と切り替えて表示する。 サンプルのソースコード HTML <img id="connect-images" src="一枚目の画像URL" data-second-image="二枚目の画像URL" data-third-image="三枚目の画像URL" data-forth-image="四枚目の画像URL"> <input type="button" value="ボタン" onclick="connector()"> JavaScript var notc = 0; var cnt = document.getElementById("connect-images"); var dftc = cnt.src; function connector(){ notc++; switch(4 - notc){ case 3: cnt.src = cnt.dataset.secondImage; break; case 2: cnt.src = cnt.dataset.thirdImage; break; case 1: cnt.src = cnt.dataset.forthImage; break; case 0: cnt.src = dftc; notc = 0; break; }} 条件のswitchを使ってコンテンツの合計数の差し引きの値に個別のコンテンツを対応させる。ボタンを押した回数の「notc」はコンテンツの合計数に達したところから「0」に初期化して次から又同じように一つずつ繰り返して判定する。 switchの条件式の数字がコンテンツの合計数で、caseの数字が合計数からボタンを押した回数を差し引いた値になっている。 どんな数のコンテンツに対してもプログラミングの骨子は同じで、switchとcaseを合わせて記載すれば大丈夫だし、繰り返しボタンに汎用的に使えると思う。 関連ページJavaScriptの画像などの読み込みが遅い場合に使いたいpreloadのソースコードJavaScriptのonclickとclassListとsetTimeoutを使ったアニメーション付きの開閉ボタンのプログラム コメント 新しい投稿 前の投稿
イヤーワームという頭の中で音楽が勝手に流れる現象を引き起こすストレスを反省 以前から頭の中で音楽が勝手に流れることが良くあって近頃でもブログで取り上げたばかりの モーツァルトの幻想曲K.397 や K.375 や ribbonの Virgin Snow などを体験していた。いつも好きな曲ばかりで鼻歌を伴って喜ばしい気持ちになるし、好調の証のように捉えてい...
芦名星のたぶん本当の死因 芦名星は自殺した。その前後、 三浦春馬と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではない...
幸せの良さはインパクトが物凄く大きいために人々の印象にも残り易いと考える ブログのヘッダーの背景画像を変更した。無料素材の クリスティン・フォークトの写真 を使っている。 Pexelsで見付けるや否や本当に素晴らしく気に入ってしまった A woman in snowflakes by Kristin Vogt / Pexels 雪の中で紺...
アガサ・クリスティの誘拐された総理大臣の日本語訳 十九から二十世紀のイギリスの作家、小説家の アガサ・クリスティ の小説の 誘拐された総理大臣 (1923)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
Imgurで画像URLと埋め込みコードを取得する方法 Imgur は自分でアップロードした画像については画像URL/直リンクを取得して他のサイトにHTMLのimgタグで表示させられる。 そして自分と他の人たちも含めて画像の埋め込みコードを取得して他のサイトのHTMLに、そのまま、記載して表示させられもする。 目次 Img...
今春に咲き出した桜の花の写真を幾つか撮って来た サイバーショットのW170を使った。七八年前のコンパクトカメラで、 一眼カメラのα5100を買って お役後免の状態に差しかかっているけど、どうするかと考えてしまわざるを得ない。画質としては力強い。画素数が10.1MPで、レンズがカールツァイスということで、写真の風合いが凄いと...
俳句の規則:字数と季語と切れ字 概要 俳句の規則 俳句は、十七文字という短い詩の中で、季節を感じさせる言葉(季語)を使い、切れ字で語調を整えて表現する伝統的な日本の文学形式です。 句の基本的な構成要素 字数を十七文字に揃える:俳句は大きく三つの部分に分けられる。上句(かみく)と中句(なかく)...
キム・テヒの反日活動を日本人としてどこまで許せるか かつて韓国ドラマの IRIS -アイリス- を観て何て綺麗で可愛くて良いんだと一目で度肝を抜かれた俳優に キム・テヒ がいた。 映画『アイリス -THE LAST-』予告編 by TAEWON ENTERTAINMENT from シネマトゥデイ 日本で放映されたのが2...
日常の些細な出来事に触れる幸せの味わいは小さいというイメージが欠かせない 誰にでも分かる些細な日常というと他でもなく、小さな幸せの味わいではないか。 永遠の詩人として本質的な認識に基づく命の尊さを伝え届けなくてはならないと考えるけれどもアクセスアップのためには誰にでも分かる些細な日常のイメージも大事にするべきだろう。 小さな幸せの味わいをどこま...
キャベツ太郎から砂糖ととうもろこしを取り入れた一日 キャベツ太郎(華道)は最も好きな菓子の一つで、市販の商品では添加物が少ない安全性と値段の安さからスナック菓子では購入の正に最有力候補になっている。 キャベツ太郎は安くて中々の良い菓子だと思う 昔ながらの駄菓子みたいなイメージだから余計なものが、一杯、入ってそうな感じが...
コメント