蓝旭前端05:JavaScript进阶

这篇具有很好参考价值的文章主要介绍了蓝旭前端05:JavaScript进阶。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

蓝旭前端05:JavaScript进阶

基础简单复习

数据类型

  • 基本数据类型:Number、String、Boolean、Null、Undefined等。
  • 引用数据类型:Object、Array、Function等。
  • typeof操作符:返回数据类型的字符串形式。

变量

  • 变量声明:var、let、const。区别:var没有块级作用域,let和const有块级作用域,const声明的变量不能修改。什么是块级作用域:{}。举例:

    {
        var a = 1
        let b = 2
        const c = 3
    }
    console.log(a) // 1
    console.log(b) // 报错
    console.log(c) // 报错
    
  • 变量赋值:赋值操作符=。

  • 变量命名:字母、数字、下划线、$,不能以数字开头

  • 变量作用域:全局作用域、局部作用域。

  • 变量提升:变量声明会提升到作用域的最前面。

  • 变量作用域链:内部作用域可以访问外部作用域的变量,反之不行。

运算符

  • 算术运算符:+、-、*、/、%。
  • 赋值运算符:=、+=、-=、*=、/=、%=。
  • 比较运算符:==!====!==、>、<、>=、<=。
  • 逻辑运算符:&&、||、!。
  • 三元运算符:condition ? expr1 : expr2。

控制语句

  • if语句:if、else if、else。
  • switch语句:switch、case、break、default。
  • for循环:for、break、continue。
  • while循环:while、do while。
  • break语句:跳出循环。
  • continue语句:跳过本次循环。
  • return语句:返回值。

JavaScript引入

<!DOCTYPE html>
<html>
<head>
    <-- 为什么不推荐在head引入script:阻塞页面渲染 -->
    <script src="script.js"></script>

    <title>JavaScript引入</title>
</head>
<body>
    <script>
        // JavaScript代码
    </script>
</body>
</html>

JavaScript输出

console.log('Hello, World!')

JavaScript注释

// 单行注释
/* 多行注释 */

JavaScript弹窗

alert('Hello, World!')

Overview

  • 获取元素
  • 事件监听
  • 事件对象
  • 事件委托
  • 事件绑定
  • 事件解绑
  • 事件触发
  • 事件处理程序
  • 异步编程(回调函数、Promise、async/await)

获取元素

通过ID获取元素

ID: 元素的id属性,是唯一的。

document.getElementById('id')

通过类名获取元素

class: 元素的class属性,可以有多个相同的类名。

document.getElementsByClassName('class')

多个类名之间用空格隔开,返回的是一个数组

通过标签名获取元素

tag: 元素的标签名,如div、p、a等。

document.getElementsByTagName('tag')

通过选择器获取元素

selector: CSS选择器,如#id、.class、tag等。

document.querySelector('selector')
document.querySelectorAll('selector')

// 举例
document.querySelector('#id')
document.querySelectorAll('.class')
document.querySelectorAll('tag')

区别:querySelector只返回第一个匹配的元素,querySelectorAll返回所有匹配的元素。

事件监听

事件监听

element.addEventListener(event, function, useCapture)

解释:event是事件的类型,function是事件触发时执行的函数,useCapture是一个布尔值,表示事件是否在捕获阶段执行。

  • 事件类型:click、mouseover、mouseout、keydown、keyup等。
  • 事件处理函数:事件触发时执行的函数。
  • 捕获阶段:事件从最外层元素向内层元素传播的阶段。例如:点击一个按钮,事件会从document传播到按钮。
事件监听的例子

举例:

document.getElementById('id').addEventListener('click', function() {
    console.log('click')
}, false)

解释:点击id为id的元素时,控制台输出click。这里false表示事件在冒泡阶段执行,若为true则表示事件在捕获阶段执行,默认是false(可不写)。

  • 什么是冒泡阶段:事件从内层元素向外层元素传播的阶段。例如:点击一个按钮,事件会从按钮传播到document。
  • 捕获阶段:事件从最外层元素向内层元素传播的阶段。例如:点击一个按钮,事件会从document传播到按钮。

冒泡阶段和捕获阶段的执行顺序:先捕获再冒泡。

冒泡和捕获的例子:

<!DOCTYPE html>
<html>
<head>
    <title>事件监听</title>
</head>
<body>
    <div id="div">
        <button id="btn">按钮</button>
    </div>
    <script>
        document.getElementById('div').addEventListener('click', function() {
            console.log('div')
        }, false)
        document.getElementById('btn').addEventListener('click', function() {
            console.log('btn')
        }, false)
    </script>
</body>
</html>

点击按钮,控制台输出:

btn
div

解释:点击按钮,事件先在按钮上触发,再在div上触发。
怎么阻止冒泡:使用event.stopPropagation()方法。
例如:

document.getElementById('btn').addEventListener('click', function(event) {
    console.log('btn')
    event.stopPropagation()
}, false)

这样点击按钮时,只会输出btn。

事件对象

事件对象

事件对象是事件触发时传递给事件处理函数的一个对象,包含了事件的相关信息。

element.addEventListener('event', function(event) {
    // 事件对象
})
  • 事件对象的属性:type、target、currentTarget、clientX、clientY等。
  • 事件对象的方法:preventDefault()、stopPropagation()等。
  • 事件对象的类型:click、mouseover、mouseout、keydown、keyup等。
  • 事件对象的坐标:事件触发时的坐标。

事件对象的例子

举例:

document.getElementById('id').addEventListener('click', function(event) {
    console.log(event.type) // click
    console.log(event.target) // 点击的元素
    console.log(event.currentTarget) // 绑定事件的元素
    console.log(event.clientX) // 鼠标点击的x坐标
    console.log(event.clientY) // 鼠标点击的y坐标
}, false)

事件委托

事件委托

事件委托是指将事件绑定到父元素上,通过事件对象的target属性判断事件源,从而执行对应的事件处理函数。

element.addEventListener('event', function(event) {
    if (event.target.tagName === 'tag') {
        // 事件处理函数
    }
})
  • 事件委托的优点:减少事件绑定,提高性能。
  • 事件委托的原理:事件冒泡。
  • 事件委托的应用:动态添加元素。

事件委托的例子

举例:

<!DOCTYPE html>
<html>
<head>
    <title>事件委托</title>
</head>
<body>
    <ul id="ul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script>
        document.getElementById('ul').addEventListener('click', function(event) {
            // 为什么要判断tagName:防止事件源不是li,注意tagName是大写,这是一个坑,这个属于DOM的知识
            // console.log(event.target.tagName)
            if (event.target.tagName === 'LI') {
                console.log(event.target.innerHTML)
            }
        }, false)
    </script>
</body>
</html>

事件绑定

事件绑定

事件绑定是指将事件处理函数绑定到元素上,当事件触发时执行对应的事件处理函数。

element.addEventListener('event', function, useCapture)
  • 事件绑定的优点:解耦,提高代码的可维护性。
  • 事件绑定的原理:事件监听。

事件绑定的例子

举例:

<!DOCTYPE html>
<html>
<head>
    <title>事件绑定</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        document.getElementById('btn').addEventListener('click', function() {
            console.log('click')
        }, false)
    </script>
</body>
</html>

事件解绑

事件解绑

事件解绑是指将事件处理函数从元素上解绑,当事件不再触发时不执行对应的事件处理函数。

element.removeEventListener('event', function, useCapture)
  • 事件解绑的优点:减少内存占用,提高性能。
  • 事件解绑的原理:事件监听。

事件解绑的例子

举例:

<!DOCTYPE html>
<html>
<head>
    <title>事件解绑</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        // 点击按钮一次后,再点击按钮,按钮的点击事件就会被解绑
        var btn = document.getElementById('btn');
        function clickHandler() {
            console.log('click');
            btn.removeEventListener('click', clickHandler);
        }
        btn.addEventListener('click', clickHandler);
    </script>
</body>

</html>

事件触发

事件触发

事件触发是指手动触发元素上的事件,执行对应的事件处理函数。

element.dispatchEvent(event)
  • 事件触发的应用:模拟用户操作。
  • 事件触发的原理:事件监听。

触发的类型:click、mouseover、mouseout、keydown、keyup等。

事件触发的例子

举例:

<!DOCTYPE html>
<html>
<head>
    <title>事件触发</title>
</head>
<body>
    <button id="btn">按钮</button>
    <div id="clr">变化颜色</div>
    <div id="keyon">现在没有按下</div>

    <script>
        var btn = document.getElementById('btn');
        btn.addEventListener('click', function() {
            console.log('click');
        }, false);
        // 手动触发按钮的点击事件
        btn.dispatchEvent(new Event('click'));

        var clr = document.getElementById('clr');
        clr.addEventListener('mouseover', function() {
            this.style.backgroundColor = 'red';
        }, false);
        // 手动触发div的mouseover事件
        // clr.dispatchEvent(new Event('mouseover'));

        var keyon = document.getElementById('keyon');
        document.addEventListener('keydown', function() {
            keyon.innerHTML = '按下了键盘';
        }, false);
        document.addEventListener('keyup', function() {
            keyon.innerHTML = '现在没有按下';
        }, false);

        // 手动触发键盘事件
        document.dispatchEvent(new KeyboardEvent('keydown', {
            key: 'a'
        }));

    </script>
</body>
</html>

事件处理程序

事件处理程序

事件处理程序是指事件触发时执行的函数,用于处理事件。

  • 事件处理程序的类型:内联事件处理程序、DOM0级事件处理程序、DOM2级事件处理程序。
  • 事件处理程序的优点:解耦,提高代码的可维护性。

内联事件处理程序

内联事件处理程序是指将事件处理函数直接写在元素的事件属性中。

<!DOCTYPE html>
<html>
<head>
    <title>内联事件处理程序</title>
</head>
<body>
    <button onclick="console.log('click')">按钮</button>
</body>
</html>
  • 优点:简单、直观。
  • 缺点:不推荐使用,不利于代码的维护。

DOM0级事件处理程序

DOM0级事件处理程序是指将事件处理函数赋值给元素的事件属性。

<!DOCTYPE html>
<html>
<head>
    <title>DOM0级事件处理程序</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        document.getElementById('btn').onclick = function() {
            console.log('click');
        }
    </script>
</body>
</html>
  • 优点:简单、直观。
  • 缺点:同一事件只能绑定一个处理函数。
  • 注意:DOM0级事件处理程序会覆盖元素原有的事件处理函数。
  • 注意:DOM0级事件处理程序不支持事件委托、不支持事件解绑、不支持事件触发、不支持事件对象。
  • 注意:DOM0级事件处理程序不推荐使用,不利于代码的维护。

DOM2级事件处理程序

DOM2级事件处理程序是指使用addEventListener方法绑定事件处理函数。

<!DOCTYPE html>
<html>
<head>
    <title>DOM2级事件处理程序</title>
</head>
<body>
    <button id="btn">按钮</button>
    <script>
        document.getElementById('btn').addEventListener('click', function() {
            console.log('click');
        }, false)
    </script>
</body>
</html>
  • 优点:支持事件委托、支持事件解绑、支持事件触发、支持事件对象。
  • 注意:DOM2级事件处理程序不会覆盖元素原有的事件处理函数。
  • 注意:DOM2级事件处理程序推荐使用,提高代码的可维护性。
  • 注意:DOM2级事件处理程序的第三个参数useCapture是一个布尔值,表示事件是否在捕获阶段执行,默认是false(可不写)。

异步编程

异步编程

异步编程是指在程序执行过程中,不按照顺序执行,而是通过回调函数、Promise、async/await等方式实现异步执行。

  • 异步编程的优点:提高程序的性能、提高用户体验。
  • 异步编程的原理:事件循环。
  • 异步编程的应用:Ajax、定时器、事件监听等。

回调函数

回调函数是指将一个函数作为参数传递给另一个函数,当满足条件时执行回调函数。

function callback() {
    console.log('callback')
}

function fn(callback) {
    callback()
}

fn(callback)
  • 回调函数的优点:解耦、提高代码的可维护性。
  • 回调函数的缺点:回调地狱、代码难以维护。
  • 回调函数的应用:Ajax、事件监听、定时器等。
举例
console.log('start')
setTimeout(() => {
    console.log('setTimeout')
}, 0)
console.log('end')

输出:

start
end
setTimeout

解释:setTimeout是异步执行的,会等到同步执行完毕后再执行。

回调地狱:

setTimeout(() => {
    console.log('1')
    setTimeout(() => {
        console.log('2')
        setTimeout(() => {
            console.log('3')
        }, 1000)
    }, 1000)
}, 1000)

解决回调地狱的方法:Promise、async/await。

Promise

Promise是ES6新增的一种异步编程解决方案,用于处理异步操作。

new Promise((resolve, reject) => {
    if (true) {
        resolve('成功')
    } else {
        reject('失败')
    }
}).then((value) => {
    console.log(value)
}).catch((reason) => {
    console.log(reason)
})
  • Promise的状态:pending、fulfilled、rejected。
  • Promise的方法:then、catch、finally。
  • Promise的优点:解决回调地狱、提高代码的可维护性。
  • Promise的缺点:无法取消、无法中途改变、无法多个一起执行。
  • Promise的应用:Ajax、事件监听、定时器等。

async/await

async/await是ES8新增的一种异步编程解决方案,用于处理异步操作。

async function fn() {
    try {
        let value = await new Promise((resolve, reject) => {
            if (true) {
                resolve('成功')
            } else {
                reject('失败')
            }
        })
        console.log(value)
    } catch (reason) {
        console.log(reason)
    }
}

fn()
  • async/await的优点:解决回调地狱、提高代码的可维护性。
  • async/await的缺点:无法取消、无法中途改变、无法多个一起执行。
  • async/await的应用:Ajax、事件监听、定时器等。

实践:猜数游戏

代码演示文章来源地址https://www.toymoban.com/news/detail-859024.html

小作业(选做其中任意一个,有兴趣的同学可以做多个)

  • 作业1:实现一个简单的轮播图效果。🎯
  • 作业2:实现一个简单的猜数游戏🎯
  • 作业3:实现一个简单的下拉菜单效果。
  • 作业4:实现一个简单的模态框效果。
  • 作业5:实现一个简单的时钟效果。🎯
  • 作业6:实现一个简单的瀑布流效果。
  • 作业7:实现一个简单的懒加载效果。
  • 作业8:实现一个简单的拖拽效果。
  • 作业9:实现一个简单的放大镜效果。
  • 作业10:实现一个简单的无缝滚动效果。
  • 作业11:实现一个简单的图片预览效果。

到了这里,关于蓝旭前端05:JavaScript进阶的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaScript】3.4 JavaScript在现代前端开发中的应用

    JavaScript 是现代前端开发的核心。无论是交互效果,还是复杂的前端应用,JavaScript 都发挥着关键作用。在本章节中,我们将探讨 JavaScript 在现代前端开发中的应用,包括如何使用 JavaScript 来处理用户交互、动态内容、前端路由、API 请求等。 JavaScript 是处理用户交互的主要工

    2024年02月04日
    浏览(47)
  • 前端开发——Javascript知识(介绍)

    目录 有关JavaScript的知识  JavaScript的优点   JavaScript的领域 JavaScript的组成 JavaScript的特点 第一个JavaScript程序 在 HTML 文档中嵌入 JavaScript 代码 在脚本文件中编写 JavaScript 代码 JavaScript内容  Html内容  JavaScript 代码执行顺序 JavaScript中的几个重要概念 标识符 保留字 区分

    2024年02月01日
    浏览(37)
  • 前端开发——JavaScript的条件语句

      世界不仅有黑,又或者白 世界而是一道精致的灰  ——Lungcen     目录 条件判断语句 if 语句 if else 语句 if else if else 语句  switch语句 break case 子句 default语句 while循环语句 do while循环语句 for循环语句 for 循环中的三个表达式 for 循环嵌套 for 循环变体——for in for 循环

    2023年04月21日
    浏览(33)
  • 快速认识,前端必学编程语言:JavaScript

    JavaScript是构建Web应用必学的一门编程语言,也是最受开发者欢迎的热门语言之一。所以,如果您还不知道JavaScript的用处、特点的话,赶紧补充一下这块基础知识。 JavaScript 是一种高级、单线程、垃圾收集、解释或即时编译、基于原型、多范式、动态语言,具有非阻塞事件循

    2024年02月05日
    浏览(37)
  • 【前端灵魂脚本语言JavaScript⑤】——JS中数组的使用

    🐚 作者: 阿伟 💂 个人主页: Flyme awei 🐋 希望大家多多支持😘一起进步呀! 💬 文章对你有帮助👉关注✨点赞👍收藏📂 第一种: var 数组名 = new Array(); 创建一个空数组 第二种: var arr2 = new Array(10); 创建一个定长为10的数组 第三种 var arr3 = new Array(a,b,c); 创建时直接指定元素值

    2023年04月08日
    浏览(42)
  • 30个前端开发中常用的JavaScript函数

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 在前端开发中通常会用到校验函数,检验是否为空、手机号格式、身份证格式等等。现按照用途分类整理出了30个常用的方法,在V

    2024年02月14日
    浏览(34)
  • [前端开发] 常见的 HTML CSS JavaScript 事件

    代码示例指路 常见的 HTML、CSS、JavaScript 事件代码示例 在 Web 开发中,事件是用户与网页交互的重要方式之一。通过事件,用户可以与页面元素进行交互,触发相应的功能或效果。本文将介绍常见的 HTML、CSS、JavaScript 事件,以及事件对象和事件代理的概念。 鼠标事件 鼠标事

    2024年02月19日
    浏览(40)
  • 开发语言漫谈-JavaScript

           JavaScript、Java名字很相近,但它们没有任何亲缘关系,是由不同公司开发的编程语言。Java由Sun公司(后被Oracle收购)开发,JavaScript最初是由Netscape公司开发的(当年浏览器的霸主)。JavaScript最初的名字是 LiveScript,Netscape将其命名为 JavaScript,无非是蹭 Java流量。当

    2024年04月16日
    浏览(37)
  • 从javascript到vue再到react:前端开发框架的演变

    目录 JavaScript: 动态语言的基础 JavaScript:Web开发的起点 Vue.js: 渐进式框架的兴起 Vue.js:简洁、高效的前端框架 React.js: 声明式UI的革新 React.js:强大、灵活的前端框架 演变之路与未来展望 演变过程 当提到前端开发中的框架时,JavaScript、Vue.js和React.js是三个最常见的名词。它

    2024年02月07日
    浏览(41)
  • [HTML]Web前端开发技术26(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 数据类型 数据类型-字符型 数据类型-数值型 数据类型-布尔型 数据类型-其它类型 变量 转义字符 运算

    2024年02月20日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包