MDN JavaScript基本结构 学习笔记

JavaScript基本结构
1 条件语句
  1. obj.addEventListener(‘change’, func)
    select选择不同选项,触发change事件

  2. if(变量名) {} //判断变量是否存在

  3. 如何让整个页面变色?

let html = document.querySelector('html');
html.style.backgroundColor = 'Black';
  1. 2者相等
obj.addEventListner('change', method)
obj.onchange = function() {}
  1. onchange事件

onchange事件会在域的内容改变时发生;也可用于单选框与复选框改变时触发的事件

//HTML,<input><textarea><select>
<element onchange = 'SomeJavaScriptCode'>
// JavaScript
obj.onchange = function() {some codes}
2 函数
  1. 内置函数

如str.replace(‘a’,‘b’)、myArray.join(’ ')、Math.random();
很多调用浏览器内置函数时调用的代码不是JS写的—是C++这种系统语言编写的
他们被定义为浏览器API的一部分,不算JS语言的一部分

  1. 匿名函数
function() {
    alert('Hello');
} 

匿名函数:无函数名,不会做任何事。

匿名函数可和事件处理程序一起使用。

let myBtn = document.querySelector('button');
myBtn.onclick = function(){
    alert('hello');
}

将匿名函数分配为变量的值,此函数可分配为多个变量的值。

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

不过这样令人费解,创建方法时,还是用

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

匿名函数最好还是用在运行负载代码以响应事件触发(如点击按钮) - 使用事件处理程序
匿名函数,也被叫函数表达式。

函数声明和函数表达式的区别
函数声明
function method() {
console.log(‘这是函数申明’);
}
函数表达式:定义函数,此函数作为变量的赋值语句或者调用执行语句而存在
let a = function fun() {
console.log(‘这是函数表达式–具名函数’);
}
解析器先读函数声明,在执行任何代码前可用。解析器执行到所在代码行才会被解释执行。
函数声明还会进行声明提升,表达式不会

  1. 其他:

(1) btn.onclick = methodbtn.onclick = method()的区别:
函数名后的括号叫函数调用运算符,需要直接调用这函数才需要这么写。
匿名函数里的代码不是直接运行的

(2) 所以,根据(1).如果函数带了参数,需要匿名函数调用又不要直接引用,可以写成

btn.onclick = function() {
    displayMessage('Woooooo~~~~');
}

(3) 常见DOM内置API介绍

  • document.querySelector(‘html’)
  • document.createElement(‘p’)
  • node.setAttribute(‘class’,‘msgBox’)
  • node.appendChild(panel): 向节点添加子节点,也可用来移动元素
  • node.textContent: node的文本属性
  • node.removeChild(): 指定node移除对应子元素

(4) 简单了解基础canvas

// 1. 创建画布
<canvas width="320" height="240">
    <p>浏览器不支持canvas!</p>
</canvas>

如果不支持canvas则显示段落里面的文字

// 2. 获取对画布canvas的引用&获取对绘画区域的特殊引用getContext(),这样可以画图
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
// 画图步骤:清除矩形->填充矩形->填充颜色
ctx.clearRect(x, y ,width , height);
ctx.fillRect(x, y ,width , height);
ctx.fillStyle('green');
3. 事件介绍
  1. 浏览器中发生的一系列事件
  • 在某个元素上点击鼠标/悬停光标
  • 在键盘中按下某个按钮
  • 调整浏览器大小/关闭浏览器窗口
  • 一个网页停止加载
  • 提交表单
  • 播放、暂停、关闭视频
  • 发生错误

事件处理器/事件监听器:事件触发时运行的代码块,如:

btn.onclick = function() {
  const rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  document.body.style.backgroundColor = rndCol;
}
  1. 使用网页事件的方法

(1) 事件处理器的属性
btn.onfocus/btn.onblue - 颜色于按钮被置于焦点/解除焦点时改变
btn.ondbclick - 颜色在按钮被双击时变色
btn.onmouseover/btn.onmouseout - 颜色在鼠标移入/移出按钮上方改变
window.onkeypress/window.onkeydown/window.onkeyup - 键盘按键被按下颜色改变,keypress:按下按钮并松开,keydown和keyup:按下&松开

基本所有元素都有onclick,但像特定元素如video,只有onplay

(2) addEventListener()和removeEventListener()
addEventListener():

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

removeEventListener()移除事件监听器

btn.removeEventListener('click', bgChange);

好处:大型项目中可高效清除不用的事件监听器
此外,addEventListener可点击执行两个事件

myElement.addEventListener('click', functionA);
myElement.addEventListener('click', functionB);
  1. 其他事件概念

(1) 事件对象
事件对象:event、evt、e,自动传递给事件处理函数
函数中设置背景颜色样式在e.target上,指按钮本身。
e.target:事件刚刚发生的元素的引用。

对多个元素设置相同事件处理程序时,e.target有用,他可以准确选择当前操作的东西,对所有元素执行某些操作

(2) 阻止默认行为
背景:希望事件不执行它的默认行为,如表单提交禁止提交空字段。
e.preventDefault()

(3) 事件冒泡&捕获
场景:一个事件发生在有父元素的元素上,现代浏览器进行2个阶段-捕获阶段&冒泡阶段
事件捕获:

  • 浏览器检查最外层祖先<html>, 是否在捕获阶段中注册了一个onclick事件处理程序,如果是就运行
  • 移到<html>下一个祖先元素,执行相同操作,until实际点击元素

事件冒泡:

  • 浏览器检查实际点击元素, 是否在冒泡阶段中注册了一个onclick事件处理程序,如果是就运行
  • 移到下一个祖先元素,执行相同操作,直到到达<html>元素

默认事件冒泡!

用stopPropagation()修补问题
事件冒泡可用stopPropagation()解决,只会当前事件处理程序,不会在冒泡链上扩大

video.onclick = function(e) {
  e.stopPropagation();
  video.play();
}

注:

  1. 默认all事件处理程序在冒泡阶段注册的,如果希望捕获阶段注册,通过addEventListener()注册处理程序,将第三个属性设置为true

(4) 事件委托
冒泡允许利用事件委托。
如果想要大量子元素单击任何一个都可执行一段代码,将事件监听器设置在其父节点上,让子节点上发生的事件冒泡到父节点上

例子:
如果想让每个列表项被点击时弹出一条信息,可以将click单击事件监听器设置在父元素<ul>上,这样事件就会从列表项冒泡到其父元素<ul>上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值