[JavaScript]Bloggerブログに動的なプログラミング言語を導入する

投稿者:Y

ラベル:blogger

公開:2020年6月4日

更新:2021年5月18日


JavaScript

誕生日から年齢を計算する

コード

<form id="form1" method="post" name="form1">
    <table>
        <tbody><tr>
            <th>誕生日</th>
            <td>
                <select name="year">
                    <option value="1950">1950</option>
                    <option value="1951">1951</option>
                    <option value="1952">1952</option>
                    <option value="1953">1953</option>
                    <option value="1954">1954</option>
                    <option value="1955">1955</option>
                    <option value="1956">1956</option>
                    <option value="1957">1957</option>
                    <option value="1958">1958</option>
                    <option value="1959">1959</option>
                    <option value="1960">1960</option>
                    <option value="1961">1961</option>
                    <option value="1962">1962</option>
                    <option value="1963">1963</option>
                    <option value="1964">1964</option>
                    <option value="1965">1965</option>
                    <option value="1966">1966</option>
                    <option value="1967">1967</option>
                    <option value="1968">1968</option>
                    <option value="1969">1969</option>
                    <option value="1970">1970</option>
                    <option value="1971">1971</option>
                    <option value="1972">1972</option>
                    <option value="1973">1973</option>
                    <option value="1974">1974</option>
                    <option value="1975">1975</option>
                    <option value="1976">1976</option>
                    <option value="1977">1977</option>
                    <option value="1978">1978</option>
                    <option value="1979">1979</option>
                    <option value="1980">1980</option>
                    <option value="1981">1981</option>
                    <option value="1982">1982</option>
                    <option value="1983">1983</option>
                    <option value="1984">1984</option>
                    <option value="1985">1985</option>
                    <option value="1986">1986</option>
                    <option value="1987">1987</option>
                    <option value="1988">1988</option>
                    <option value="1989">1989</option>
                    <option value="1990">1990</option>
                    <option value="1991">1991</option>
                    <option value="1992">1992</option>
                    <option value="1993">1993</option>
                    <option value="1994">1994</option>
                    <option value="1995">1995</option>
                    <option value="1996">1996</option>
                    <option value="1997">1997</option>
                    <option value="1998">1998</option>
                    <option value="1999">1999</option>
                    <option value="2000">2000</option>
                    <option value="2001">2001</option>
                    <option value="2002">2002</option>
                    <option value="2003">2003</option>
                    <option value="2004">2004</option>
                    <option value="2005">2005</option>
                    <option value="2006">2006</option>
                    <option value="2007">2007</option>
                    <option value="2008">2008</option>
                    <option value="2009">2009</option>
                    <option value="2010">2010</option>
                    <option value="2011">2011</option>
                    <option value="2012">2012</option>
                    <option value="2013">2013</option>
                    <option value="2014">2014</option>
                    <option value="2015">2015</option>
                    <option value="2016">2016</option>
                    <option value="2017">2017</option>
                    <option value="2018">2018</option>
                    <option value="2019">2019</option>
                    <option value="2020">2020</option>
                </select>年
                <select name="month">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                    <option value="11">11</option>
                    <option value="12">12</option>
                </select>月
                <select name="days">
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                    <option value="6">6</option>
                    <option value="7">7</option>
                    <option value="8">8</option>
                    <option value="9">9</option>
                    <option value="10">10</option>
                    <option value="11">11</option>
                    <option value="12">12</option>
                    <option value="13">13</option>
                    <option value="14">14</option>
                    <option value="15">15</option>
                    <option value="16">16</option>
                    <option value="17">17</option>
                    <option value="18">18</option>
                    <option value="19">19</option>
                    <option value="20">20</option>
                    <option value="21">21</option>
                    <option value="22">22</option>
                    <option value="23">23</option>
                    <option value="24">24</option>
                    <option value="25">25</option>
                    <option value="26">26</option>
                    <option value="27">27</option>
                    <option value="28">28</option>
                    <option value="29">29</option>
                    <option value="30">30</option>
                    <option value="31">31</option>
                </select>日
            </td>
        </tr>
        <tr>
            <th>年齢</th>
            <td><input name="age" type="text" value="" /></td>
        </tr>
    </tbody></table></form>
  
<script>
var formObj = '';
 
var zeroFormat = function(v, n) {
    vl = String(v).length;
    if (n > vl) {
        return (new Array((n - vl) + 1).join(0)) + v;
    } else {
        return v;
    }
};
 
var ageCalculator = function(year, month, day) {
    var dateObj  = new Date(),
        today    = parseInt('' + dateObj.getFullYear() + zeroFormat(dateObj.getMonth() + 1, 2) + zeroFormat(dateObj.getDate(), 2)),
        birthday = parseInt('' + year + zeroFormat(month, 2) + zeroFormat(day, 2));
 
    formObj.age.value = parseInt((today - birthday) / 10000);
};
 
var changeDate = function(mode) {
    var tYear   = formObj.year,
        tMonth  = formObj.month,
        tDays   = formObj.days,
        selectY = tYear.options[tYear.selectedIndex].value,
        selectM = tMonth.options[tMonth.selectedIndex].value,
        selectD = tDays.options[tDays.selectedIndex].value,
        dateObj,
        gDate,
        i;
 
    if (mode === 'date') {
        dateObj = new Date(selectY, selectM, 0);
        gDate   = dateObj.getDate();
 
        tDays.length = 0;
 
        for (i = 1 ;i <= gDate; i++) {
            tDays.options[i] = new Option(i, i);
        }
 
        tDays.removeChild(tDays.options[0]);
 
        if (selectD > tDays.length) {
            tDays.options[tDays.length - 1].selected = true;
        } else {
            tDays.options[selectD - 1].selected = true;
        }
    }
 
    ageCalculator(selectY, selectM, selectD);
};
 
formObj = document.form1;

formObj.year.onchange = function() {
    changeDate('date');
};
 
formObj.month.onchange = function() {
    changeDate('date');
};

formObj.days.onchange = function() {
    changeDate('age');
};
</script>

表示

誕生日
年齢

解説

formタグ

入力・送信フォームを作る。
method属性でpostを指定すると、
ウェブサーバーへの送信方法がURLではなく本文となる。

文章を認識する

コード

<script>
        var flag_speech = false;
        var speech_recognition;

        function startRec() {

            flag_speech = true;

            initSpeech();

            speech_recognition.start();
        }

        function initSpeech() {
            speech_recognition = new webkitSpeechRecognition();

            speech_recognition.lang = 'ja-JP';
            speech_recognition.continuous = true;

            speech_recognition.addEventListener('start', function (event) {
            }, false);

            speech_recognition.addEventListener('result', function (event) {
                var results = event.results;
                for (var i = event.resultIndex; i < results.length; i++) {
                    if (results[i].isFinal) {
                        document.getElementById('result_text').innerHTML += results[i][0].transcript + "\n";
                    }
                    else {
                    }
                }
            }, false);
        }
</script>

<div>
        <input onclick="startRec();" type="button" value="音声認識開始" />
</div>
        <textarea class="textContent" id="result_text"></textarea>

表示

解説

Web API(Application Programming Interface)の
SpeechRecognitionを利用して音声を認識しています。

文章を読み上げる

コード

<script>
        var speech;
        var speech_uttr;
    
        function initSpeak() {
            speech = window.speechSynthesis;
            speech_uttr = new SpeechSynthesisUtterance();
            speech_uttr.lang = 'ja-JP';
            speech_uttr.rate = 1;    
            speech_uttr.addEventListener('start', function () {
            });    
            speech_uttr.addEventListener('end', function () {
            });
        }
    
        initSpeak();
    
        function start() {
            speech_uttr.text = document.getElementById("speak_text").value;    
            speech_uttr.pitch = document.getElementById("my_pitch").value;
            speech_uttr.rate = document.getElementById("my_rate").value;    
            speech.speak(speech_uttr);
        }   
    </script>

        <div>・下のエリアに読み上げたい文章を入力してください。</div>
        <textarea id="speak_text"></textarea>
        <input type="button" onclick="start();" value="start">
        <input type="button" onclick="speech.cancel();" value="cancel">
        <input type="button" onclick="speech.pause();" value="pause">
        <input type="button" onclick="speech.resume();" value="resume">
        <div> 以下の設定はcancel後のstartで反映されます。</div>
              <div> ・高さ
                <input id="my_pitch" type="number" value="1"></div>
              <div> ・速さ
                <input id="my_rate" type="number" value="1"></div>

表示

・下のエリアに読み上げたい文章を入力してください。
 
以下の設定はcancel後のstartで反映されます。
・高さ
・速さ

解説

Web API(Application Programming Interface)の
SpeechSyntesisを利用して合成音声を取得しています。

文字数をカウントする

コード

<textarea onkeyup="document.getElementById('count').value=this.value.length">
</textarea>
<div><input type="text" id="count"> 文字</div>

表示

・下のエリアにカウントする文字を入力してください。
文字

解説

全角も半角もスペースも改行も1カウントとみなす

textareaオブジェクト

複数行のテキスト入力欄を作成する

onkeyupイベント

ユーザーがキーを離した時にイベントが発生する

document.getElementById()

指定したid値を持つ要素を返す

目次をつくる

コード

<script type="text/javascript"><!--
function contents( CParent , CChild ){
ECParent = document.getElementById( CParent );
ECChild = document.getElementById( CChild ).style;
if (ECChild.display == "none"){
ECChild.display = "block";
ECParent.innerHTML = ECParent.innerHTML.replace( "[開く]" , "[閉じる]" );
}else{
ECChild.display = "none";
ECParent.innerHTML = ECParent.innerHTML.replace( "[閉じる]" , "[開く]" );
}
}
// --></script>
<div id="CP" onclick="contents( 'CP' , 'CC' )">目次 [開く]</div>
<div style="margin-left: 2em;">
<div id="CC" style="display: none;">
<div>目次をつくる</div>
<div>最終更新日を表示する</div>
<div>アクセス解析に用いるcookie情報を表示する</div>
</div>
</div>

表示

・下の動画では実際に動く様子が見られます。

・下の目次をクリックしてみてください。

目次 [開く]

解説

function関数

contents( CParent , CChild )を定義する

document.getElementById()

指定したid値を持つ要素を返す

if/else構文

指定された条件が、
真なら文を実行/偽ならもう一方の文を実行

replace()

ECParent内HTMLの[開く]と[閉じる]を置換する

onclick属性

「目次 [開く]」をクリックした時に
contents( 'CP' , 'CC' )を実行する

最終更新日を表示する

コード

<script type="text/javascript"><!--
LMD = new Date( document.lastModified );
Y = LMD.getFullYear();
M = LMD.getMonth() + 1;
D = LMD.getDate();
LMYMD = "最終更新日: " + Y + "年" + M + "月" + D + "日";
document.write( LMYMD );
// --></script>

表示

解説

new Date()

document.lastmodifiedから与えられた日付をLMDと定義する

getFullyear()

与えられた「年」の数を返す
×getYear()
→与えられた「年」の数から1900を引いた数を返す

getMonth()

与えられた「月」の数を0を起点として返す
(0-11の値を取得するため、+1が必要)

getDate()

与えられた「日」の数を返す

document.write()

LMYMDに定義されたものを記述する

アクセス解析に用いるcookie情報を表示する

コード

<script type="text/javascript"><!--
document.write( document.cookie );
// --></script>

表示

※環境によって表示されない場合があるようです。

解説

document.write()

document.cookieの情報を記述する

・_gaという名前のcookie
・cookieのバージョン.cookieのドメイン情報.ランダム数列.初回訪問時のタイムスタンプ
・ユーザーを区別するために使用する
・有効期限は2年間