JavaScript - Blocks - Functions

浏览器内置 functions

var myText = 'I am a string';
var newString = myText.replace('string', 'sausage');
console.log(newString);
// the replace() string function takes a string,
// replaces one substring with another, and returns
// a new string with the replacement made

var myArray = ['I', 'love', 'chocolate', 'frogs'];
var madeAString = myArray.join(' ');
console.log(madeAString);
// the join() function takes an array, joins
// all the array items together into a single
// string, and returns this new string

var myNumber = Math.random();
// the random() function generates a random
// number between 0 and 1, and returns that
// number

定义在对象中的 function 称为方法

自定义 functions

function draw() {
  ctx.clearRect(0,0,WIDTH,HEIGHT);
  for (var i = 0; i < 100; i++) {
    ctx.beginPath();
    ctx.fillStyle = 'rgba(255,0,0,0.5)';
    ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
    ctx.fill();
  }
}

draw();

function random(number) {
  return Math.floor(Math.random()*number);
}

执行 functions

function myFunction() {
  alert('hello');
}

myFunction();
// calls the function once

Anonymous functions 匿名

function myFunction() {
  alert('hello');
}

function() {
  alert('hello');
}

var myButton = document.querySelector('button');
myButton.onclick = function() {
  alert('hello');
}

var myGreeting = function() {
  alert('hello');
}
myGreeting();

var anotherGreeting = function() {
  alert('hello');
}
myGreeting();
anotherGreeting();

// 匿名方法多用于事件绑定
myButton.onclick = function() {
  alert('hello');
  // I can put as much code
  // inside here as I want
}

Function 参数

var myNumber = Math.random();

var myText = 'I am a string';
var newString = myText.replace('string', 'sausage');

var myArray = ['I', 'love', 'chocolate', 'frogs'];
var madeAString = myArray.join(' ');
// returns 'I love chocolate frogs'
var madeAString = myArray.join();
// returns 'I,love,chocolate,frogs'
// 若未指定参数,默认使用 ‘,’ 做为分隔符
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Function start</title>
    <style>
        .msgBox {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 242px;
            background: #eee;
        }

        .msgBox p {
            line-height: 1.5;
            padding: 10px 20px;
            color: #333;
            padding-left: 82px;
            background-position: 25px center;
            background-repeat: no-repeat;
        }

        .msgBox button {
            background: none;
            border: none;
            position: absolute;
            top: 0;
            right: 0;
            font-size: 1.1rem;
            color: #aaa;
        }
    </style>
</head>

<body>
    <button>Display message box</button>

    <script>
        // function displayMessage() {
        //     let html = document.querySelector("html");

        //     let panel = document.createElement("div");
        //     panel.setAttribute("class", "msgBox");
        //     html.appendChild(panel);

        //     let msg = document.createElement("p");
        //     msg.textContent = "This is a message box";
        //     panel.appendChild(msg);

        //     let closeBtn = document.createElement("button");
        //     closeBtn.textContent = "X";
        //     panel.appendChild(closeBtn);
        //     closeBtn.onclick = function () {
        //         panel.parentNode.removeChild(panel);
        //     };
        // }

        function displayMessage(msgText, msgType) {
            let html = document.querySelector("html");

            let panel = document.createElement("div");
            panel.setAttribute("class", "msgBox");
            html.appendChild(panel);

            let msg = document.createElement("p");
            msg.textContent = msgText;
            panel.appendChild(msg);

            let closeBtn = document.createElement("button");
            closeBtn.textContent = "X";
            panel.appendChild(closeBtn);
            closeBtn.onclick = function () {
                panel.parentNode.removeChild(panel);
            };

            if (msgType === "warning") {
                msg.style.backgroundImage = "url(./images/warning.png)";
                panel.style.backgroundColor = "red";
            } else if (msgType === "chat") {
                msg.style.backgroundImage = "url(./images/chat.png)";
                panel.style.backgroundColor = "aqua";
            } else {
                msg.style.paddingLeft = "20px";
            }
        }

        var btn = document.querySelector("button");
        // btn.onclick = displayMessage; // 此種方式的呼叫,在按鈕點擊之後才會呼叫方法
        /*
        btn.onclick = displayMessage();
        此種方式的呼叫,在按鈕未被點擊就會呼叫方法,就是在畫面載入完成后就會呼叫方法
        */
        btn.onclick = function () {
            displayMessage('Your inbox is almost full — delete some mails', 'warning');
            // displayMessage('Brian: Hi there, how are you today?', 'chat');
        }
    </script>
</body>

</html>

Function 返回值

var myText = 'I am a string';
var newString = myText.replace('string', 'sausage');
console.log(newString);
// the replace() string function takes a string,
// replaces one substring with another, and returns
// a new string with the replacement made
function draw() {
  ctx.clearRect(0,0,WIDTH,HEIGHT);
  for (var i = 0; i < 100; i++) {
    ctx.beginPath();
    ctx.fillStyle = 'rgba(255,0,0,0.5)';
    ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
    ctx.fill();
  }
}

function randomNumber(number) {
  return Math.floor(Math.random()*number);
}

function randomNumber(number) {
  var result = Math.floor(Math.random()*number);
  return result;
}

ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);

Events

<button>Change color</button>
var btn = document.querySelector('button');

function random(number) {
  return Math.floor(Math.random()*(number+1));
}

btn.onclick = function() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}

使用事件的方式

var btn = document.querySelector('button');

btn.onclick = function() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}



var btn = document.querySelector('button');

function bgChange() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}

btn.onclick = bgChange;
<button onclick="bgChange()">Press me</button>
function bgChange() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}
var btn = document.querySelector('button');

function bgChange() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}   

btn.addEventListener('click', bgChange);



btn.addEventListener('click', function() {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
});



btn.removeEventListener('click', bgChange);



myElement.onclick = functionA;
myElement.onclick = functionB;



myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);

事件对象

自动传入事件中,其为调用事件的元素本身

function bgChange(e) {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  e.target.style.backgroundColor = rndCol; // e.target 为按钮自身
  console.log(e);
}  

btn.addEventListener('click', bgChange);



var divs = document.querySelectorAll('div');

for (var i = 0; i < divs.length; i++) {
  divs[i].onclick = function(e) {
    e.target.style.backgroundColor = bgChange();
  }
}

阻止事件默认动作

大多数例子是阻止网页表单的默认动作,若用户输入错误讯息,此时就要阻止表单提交的默认动作。

<form>
  <div>
    <label for="fname">First name: </label>
    <input id="fname" type="text">
  </div>
  <div>
    <label for="lname">Last name: </label>
    <input id="lname" type="text">
  </div>
  <div>
     <input id="submit" type="submit">
  </div>
</form>
<p></p>
var form = document.querySelector('form');
var fname = document.getElementById('fname');
var lname = document.getElementById('lname');
var submit = document.getElementById('submit');
var para = document.querySelector('p');

form.onsubmit = function(e) {
  if (fname.value === '' || lname.value === '') {
    e.preventDefault();
    para.textContent = 'You need to fill in both names!';
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值