百度前端學院:第十六天,開始感受JS的樂趣【計算器,簡歷代碼】

IEF|零基礎學院|16天:javascript【1】

@(IEF筆記)[javascript, IEF]

百度前端學院課程:第十六天,開始感受JS的樂趣

1. 課程目標

從今天開始,我們要開始學習在Web開發中使用 JavaScript/ECMAScript 來實現各種各樣的交互邏輯及數據處理,今天的目標是初步瞭解 JavaScript/ECMAScript 是什麼,開始學習基本的語法,並通過幾個小例子的練習,來初步感受語言的魅力。

2. 學習總結

學習資料:
JavaScript基礎 - 學習 Web 開發 | MDN
JavaScript 第一步 - 學習 Web 開發 | MDN

概念:

  • javascript概念,作用,是一種解釋代碼,動態代碼,目前學習客戶端代碼;
    • 解釋代碼 vs 編譯代碼;
    • 服務端代碼vs客戶端代碼;
    • 動態代碼 vs 靜態代碼;
    • JavaScript/ECMAScript的差別;
    • API概念;

編程:

  • js基本結構和語法,通過<script>標籤添加,分成外部和內部;
    • js從上到下按順序運行
    • js程序員思維;
    • js程序基本結構:
    • 添加腳本,
    • 初始化變量(網頁對象object,數組array,計數器···),
    • 函數(函數內變量,初始化,判斷條件,操作網頁對象/變量,還原),
    • 事件(監聽器,響應器),
    • 循環(條件,用在字符串,數組處理爲多)
    • 完善邏輯
    • js常見錯誤
    • 語法錯誤(有報錯)常見:
      • 拼寫錯誤,大小寫
      • 變量爲null,可能是對象名寫錯,對象還沒創建
    • 邏輯錯誤(無報錯)常見:
      • 運算符用錯,計算式寫錯;
      • 運行順序
      • 有些操作語句要賦值才能起作用
    • js運算符
    • js字符串
    • 轉義字符
    • 連接字符串
    • 檢索字符串,替換,分割,提取
    • 大小寫
    • 字符串長度
    • 數字與字符串的連接,轉化,區分
    • js數組
    • 創建數組。添加pushunshift,刪除popshift,訪問,修改數組項;
    • 數組長度。length
    • 字符串與數組的轉換splitjoin
    • js基礎練習

3. 任務

3.1 任務一:簡易計算器的實現

任務:第十六天,開始感受JS的樂趣
demo演示:簡易計算器的實現
源代碼地址:簡易計算器的實現-github

任務要求:
  • 點對應加減乘除按鈕的時候,將兩個輸入框中的數字做對應的算術,並將結果顯示在id爲result的p標籤內。
  • 暫時不用做任何異常處理
效果:

Alt text

js代碼:
  1. 首先onlod函數確保文檔加載完畢;
  2. 定義元素變量;
  3. 四個按鈕的監聽器;
  4. 四個運算函數:先把獲取的數值字符轉變成數字!!否則不能進行運算;然後把結果輸出到頁面上;
  5. 注意!!除法函數要先判斷除數是否爲0,爲0時拋出異常,使用try-catch結構拋出異常,記住不要在結果元素上輸出異常,用彈窗輸出。因爲除數爲0時計算結果有值:infinity(無窮大),結果值會覆蓋掉異常。
        <script>
            window.onload = function () {
                //variation
                var add = document.getElementById('add-btn');
                console.log(add);
                var minus = document.getElementById('minus-btn');
                var times = document.getElementById('times-btn');
                var divide = document.getElementById('divide-btn');
                var firstNumber = document.getElementById('first-number');
                console.log(typeof firstNumber.value);
                var secondNumber = document.getElementById('second-number');
                var result;
                var resultText = document.getElementById('result');
                console.log(resultText);

                //事件監聽器
                add.addEventListener('click', addTwo);
                minus.addEventListener('click', minusTwo);
                times.addEventListener('click', timesTwo);
                divide.addEventListener('click', divideTwo);

                //function
                function addTwo() {
                    result = Number(firstNumber.value) + Number(secondNumber.value);
                    resultText.innerHTML = '運算結果: ' + result;
                    console.log(firstNumber.value);
                    console.log(typeof firstNumber);
                    console.log(secondNumber.value);
                    console.log(result);
                    console.log(resultText.textContent);

                }

                function minusTwo() {
                    result = Number(firstNumber.value) - Number(secondNumber.value);
                    resultText.textContent = '運算結果: ' + result;
                    console.log('-' + result);
                }

                function timesTwo() {
                    result = Number(firstNumber.value) * Number(secondNumber.value);
                    resultText.textContent = '運算結果: ' + result;
                    console.log('*' + result);
                }

                function divideTwo() {
                    var divisor = Number(secondNumber.value);
                    // 如果輸入除數爲0,拋出異常
                    try {
                        if (divisor == 0) {
                            throw '除數不能爲0!';
                        }
                    } catch (err) {
                        alert(err + '請重新輸入除數。');
                        // resultText.textContent = err + '請重新選擇除數';
                        console.log(err);

                    }
                    result = Number(firstNumber.value) / Number(secondNumber.value);
                    resultText.textContent = '運算結果: ' + result;
                    console.log('/' + result);
                }
            }
        </script>

3.2 任務二:通過JS簡歷中加入簡易彩蛋

任務: 第十六天,開始感受JS的樂趣
demo演示:通過JS簡歷中加入簡易彩蛋
源代碼地址:通過JS簡歷中加入簡易彩蛋-github

效果:

Alt text

js代碼:
  1. 定義元素變量,指向兩個按鈕和彈出信息段落;
  2. 監聽按鈕是否被按下;
  3. 響應函數:清空信息-信息段落可見-改變信息內容;
  4. 注意!!一定要先清空信息段落,否則來回切換按鈕時上一個的信息會亂入;
  5. 可以在段落<p>裏面插入<li>元素;
  6. 嵌套函數的方式在新增按鈕裏觸發超鏈接
        window.onload = function () {

        //元素變量
        var hello = document.querySelector('.helloButton');
        var hobbies = document.querySelector('.hobbyButton');
        var message = this.document.querySelector('.message');

        //按鈕的監聽器
        hello.addEventListener('click', sayHello);
        hobbies.addEventListener('click', myHobbies);

        //響應函數
        function sayHello() {
            message.textContent = '';
            message.style.visibility = 'visible'
            message.textContent = '很高興 : ) 能遇見你!';
            message.style.backgroundColor = 'yellow';
        }
        function myHobbies() {
            message.style.visibility = 'visible'
            message.textContent = '';
            var hobbiesArray = ['電影','美食','舞蹈','單機遊戲']
            for(var i = 0; i < hobbiesArray.length; i++) {
                var listItem = document.createElement('li');
                listItem.textContent = hobbiesArray[i];
                message.appendChild(listItem);
                    }
                var more = document.createElement('button');
                more.textContent = '還不夠?點我';
                message.appendChild(more);
                more.addEventListener('click',openUrl);
                function openUrl() {
                    window.location.href='https://github.com/juwuyu';
                }
                 message.style.background = '#9966CC' ;
        }

    }

3.1 任務三:蠢萌故事生成器(MDN)

任務:蠢萌故事生成器 - 學習 Web 開發 | MDN
demo演示:蠢萌故事生成器
源代碼地址:蠢萌故事生成器-github

任務要求:
  1. 當用戶按下“Generate random story”按鈕時,生成一則笑話。
  2. 當且僅當在按鈕被按下前用戶在“Enter custom name”中輸入了其名字的情況下,將默認的名字變成用戶的名字。
  3. 當用戶在按下生成按鈕之前點擊了UK radio按鈕時,將默認的US重量和溫度單位換成英式的。
  4. 如果用戶再次按下生成按鈕,則隨即生成另一則笑話(如果用戶願意的話,他可以一直按生成按鈕)
效果:

Alt text

js代碼:
  1. 首先!!一定要把js代碼放在window.onload函數裏面,文檔對象加載完成之後再執行js,否則可能出現object變量爲空(還沒被瀏覽器創建);
  2. 然後創建一些變量來定義文檔中的按鈕,輸入框,單選框,段落等元素;
  3. 再然後定義一個返回數組隨機項的函數,用Math.floor(Math.random() * array.length)的方法生成數組長度內的隨機數,幫助生成故事裏隨機的關鍵詞;
  4. 把故事主體和關鍵詞數組放入變量;
  5. 按鈕監聽器,按下觸發result函數;
  6. result函數:
    • 故事主體賦值給一個新變量!!調用一次函數在初始故事的基礎上生成一個新故事,這樣不會改變初始故事的內容;
    • 生成隨機關鍵詞並替換,注意!!出現多次的關鍵詞要替換多次,不然只會替換第一個詞;
    • 用輸入的名字替換默認名字,條件:輸入不爲空;
    • 轉換單位,替換體重和溫度,條件:uk被選中;
    • 更改文檔元素內容,並設置該元素可見;
    • 注意!!每次修改字符串變量之後,要賦值,不然修改不生效。
    window.onload = function () {//文檔對象加載完成之後再執行js

        //定義文檔變量
        //COMPLETE VARIABLE AND FUNCTION DEFINITIONS
        var customName = document.getElementById('customname');
        console.log(customName.value);
        var randomize = document.querySelector('.randomize');
        console.log(randomize);
        console.log(document.querySelector('.randomize'));
        var story = document.querySelector('.story');

        //定義函數,返回數組中的隨機項
        function randomValueFromArray(array) {
            return array[Math.floor(Math.random() * array.length)];
        }

        //定義故事中的字符串
        //RAW TEXT STRINGS
        var storyText = 'It was 94 farenheit outside, so :insertx: went for a walk. When they got to :inserty:, they stared in horror for a few moments, then :insertz:. Bob saw the whole thing, but was not surprised — :insertx: weighs 300 pounds, and it was a hot day.';
        var insertX = ['Willy the Goblin', 'Big Daddy', 'Father Christmas'];
        var insertY = ['the soup kitchen', 'Disneyland', 'the White House'];
        var insertZ = ['turned into a slug and crawled away', 'spontaneously combusted', 'melted into a puddle on the sidewalk'];

        //事件監聽器與主函數
        //EVENT LISTENER AND PARTIAL FUNCTION DEFINITION
        randomize.addEventListener('click', result);

        function result() {
            //把storyText傳給新變量,對新變量進行替換[賦值!!]
            var newStory = storyText;
            var xItem = randomValueFromArray(insertX);
            var yItem = randomValueFromArray(insertY);
            var zItem = randomValueFromArray(insertZ);
            newStory = newStory.replace(':insertx:', xItem);
            newStory = newStory.replace(':insertx:', xItem);
            newStory = newStory.replace(':inserty:', yItem);
            newStory = newStory.replace(':insertz:', zItem);

            //檢測輸入是否爲空,替換名字
            if (customName.value != '') {
                var name = customName.value;
                newStory = newStory.replace('Bob', name);
            }
            //檢測uk是否被選中,替換溫度重量
            if (document.getElementById('uk').checked) {
                var weight = Math.round(300 * 0.0714286) + ' stone';
                var temperature = Math.round((94 - 32) / 1.8) + ' centigrade';
                newStory = newStory.replace('94 farenheit', temperature);
                newStory = newStory.replace('300 pounds', weight);

            }
            //生成隨機故事

            story.textContent = newStory;
            story.style.visibility = 'visible';

        }
        document.querySelector('html').style.backgroundColor = 'red';
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章