从编程小白到全栈开发:响应用户的操作

简介: 咳嗽连续咳了一个多月,蓝瘦,我都快要忘记更新文章了...还好一个读友提醒我怎么好久没更新了,我才提起一口气,嘎吱嘎吱的重新转起我这磨损严重的脑袋来。懒,就一个字,我只说一次...好,言归正传!今天我想跟大家讨论一下如何在前端处理用户操作这个问题。

咳嗽连续咳了一个多月,蓝瘦,我都快要忘记更新文章了...还好一个读友提醒我怎么好久没更新了,我才提起一口气,嘎吱嘎吱的重新转起我这磨损严重的脑袋来。

懒,就一个字,我只说一次...

好,言归正传!今天我想跟大家讨论一下如何在前端处理用户操作这个问题。我们知道,当我们浏览一个网页或是手机app的时候,通常会跟它产生很多的交互动作,比如点击一个按钮、选择列表中的一行、滚动屏幕、使用键盘输入内容等等,而且伴随着这些操作,网页或app会有相应的变化反馈。

这种对用户操作的感知并做出计划之内的处理,是我们在前端编程中非常重要的一件事,直接关系到一款软件用户体验的优劣。

那么在我们的HTML代码中,具体是怎么来处理这些事情的呢?

你还记得否,我们之前已经写过了一个简易计算器的代码?(What?你还没写?快去先写一下吧,抄一遍也行啊,赶紧的...)在那个简陋的计算器中,我们点击计算器界面上的“计算”按钮,程序就会为我们计算出结果。

好,那么问题来了:

为什么是点击了这个“计算”按钮,而不是页面上别的地方,才会执行运算并出结果呢?

因为...我们只给了这个按钮这样的能力啊!

在HTML元素上添加事件监听

让我们来看一下这个按钮的代码是怎么写的:

<button onclick="calc()">计算</button>

是不是注意到这个button标签上onclick这个属性了?它是干嘛用的呢?来来来,仔细看一下,我们把onclick拆开来不就是on click么,是不是明白了一些?对呀,就是“当点击”它的时候要做的事情嘛!这样一个属性,我们叫做事件监听;而这个属性的值,我们叫做事件处理函数,它可以是在本页面作用域内任意的JavaScript代码。

不如马上打开你的VS Code,写下如下代码:

<button onclick="var a = 12345; alert(a)">点我试试</button>

在浏览器中运行这个代码,点击按钮,你能看到浏览器弹出了一个显示着12345的消息框来。

一般来说,我们并不推荐这种直接在属性值中写多个JS语句形式,既不直观,也不利于代码复用。我们通常将它们放进一个额外的函数中。改造之后的代码如下:

<button onclick="buttonClickHandler()">点我试试</button>

<script>
function buttonClickHandler() {
    var a = 12345; 
    alert(a);
}
</script>

看起来是不是好多了?

每个事件处理函数,都可以接收一个event对象作为参数,这个对象里面包含这次用户操作的丰富信息。让我们稍微改写一下上面的代码:

<button onclick="buttonClickHandler(event)">点我试试</button>

<script>
function buttonClickHandler(event) {
    console.log(event);
}
</script>

当我们点击按钮的时候,查看浏览器的开发者工具中的信息,就能看到这个event对象的详细内容被打印了出来,如下图所示:

Click事件对象

这是个MouseEvent类型的对象,代表这是由鼠标产生的事件,它包含了这个事件的类型(type),产生的源头DOM元素(target),事件发生的位置信息(如clientX, clientY)等等重要信息。不同的输入设备,可能会产生不同的事件(如键盘操作,会产生KeyboardEvent事件)。不同类型的输入设备产生的事件,携带着不太一样的信息,进入事件处理函数,为我们下一步的处理提供了条件。

为了加深印象,我们立马来试一下键盘事件,在一个输入框input标签上,使用onkeypress监听键盘按下的事件:

<input type="text" onkeypress="keypressHandler(event)">

<script>
function keypressHandler(event) {
    console.log(event.key + '|' + event.keyCode);
}
</script>

随着在输入框里的输入,可以看到我们在键盘上按下的键的内容以及键的标识代码被一一打印了出来。

这些例子看下来,是不是觉得获取用户的操作挺简单的?确实很简单。

那HTML的标签元素那么多,哪些上面可以用事件监听呢?答案是所有元素。只是有些事件是通用的,有些事件是某些特定元素上才有的,具体用到的时候,去网上查一下手册就行了。

通过JS代码添加事件监听

接下来,要给大家介绍另一种为HTML元素添加事件监听的方式。这种方式就是通过JS调用HTML DOM的API,来进行事件处理函数的添加、删除。

同样,我们来改造一下上面按钮的那个例子:

<button id="mybtn">点我试试</button>

<script>
    function buttonClickHandler(event) {
        console.log("Hello");
    }

    // 获取button元素
    var mybtn = document.getElementById('mybtn');

    // 为button添加click监听处理器
    mybtn.addEventListener('click', buttonClickHandler);
</script>

可以看到,我们通过调用这个按钮DOM的API addEventListener,同样可以为它添加事件处理函数。而且,这种方式可以很方便的为元素添加多个不同的事件处理函数:

<button id="mybtn">点我试试</button>

<script>
    function buttonClickHandler1(event) {
        console.log("Hello");
    }

    function buttonClickHandler2(event) {
        console.log("World");
    }

    var mybtn = document.getElementById('mybtn');

    mybtn.addEventListener('click', buttonClickHandler1);
    mybtn.addEventListener('click', buttonClickHandler2);
</script>

添加的多个事件处理函数在click事件触发的时候,都会被执行。

当一些事件处理函数不再需要的时候,我们也可以方便的移除它们:

<button id="mybtn">点我试试</button>

<script>
    function buttonClickHandler1(event) {
        console.log("Hello");
    }

    function buttonClickHandler2(event) {
        console.log("World");
    }

    var mybtn = document.getElementById('mybtn');

    mybtn.addEventListener('click', buttonClickHandler1);
    mybtn.addEventListener('click', buttonClickHandler2);

    // 5秒后移除事件处理函数buttonClickHandler2
    setTimeout(function () {
        mybtn.removeEventListener('click', buttonClickHandler2)
    }, 5000)
</script>

这个例子中,如果前5秒钟内点击按钮的话,总会打印出Hello和World;而超过5秒后再点击按钮的话,则只会打印出Hello了。

怎么样?是不是这种方式看起来很强大?而且,这样的做法可以使得HTML代码和JS代码分离,两个部分干干净净的不再搅和在一起,各司其职,便于维护。

好了,关于对用户操作的处理,今天就先讲这么多,让大家对其有个初步了解,后面我们再继续探讨吧。

工作固然重要,身体才是革命的本钱。
欢迎关注一斤代码的系列课程《从编程小白到全栈开发》

目录
相关文章
|
4月前
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
266 0
|
4月前
|
前端开发 NoSQL 关系型数据库
从前端到后端:探索全栈开发的无限可能
本文将介绍全栈开发的概念以及其在现代技术领域中的重要性。我们将深入探讨前端和后端开发的关联,并探索多种编程语言(如Java、Python、C、PHP、Go)以及数据库技术在全栈开发中的应用。通过本文,读者将了解到如何成为一名全栈开发人员,以及如何利用全栈开发的技能构建出强大且可扩展的应用程序。
|
开发者
氚云丨开发课— 05 后端代码调试与业务对象操作| 学习笔记
快速学习氚云丨开发课— 05 后端代码调试与业务对象操作。
586 0
|
17天前
|
SQL 安全 前端开发
全栈开发者必看!前后端表单交互的最佳实践与安全考量,开启高效稳定开发之旅!
【8月更文挑战第31天】全栈开发者在软件开发中扮演着重要角色,需精通前端与后端技术。表单交互是常见的开发场景,涉及从设计直观表单到处理数据等多个环节。前端应使用清晰标签和验证提示提升用户体验,如用红色星号标示必填项;后端需严格验证数据并处理细节,如去除空格和转换类型。此外,安全防护同样关键,包括防止脚本注入和SQL攻击。遵循这些最佳实践,全栈开发者能构建稳定、安全的应用程序,不断提升用户体验。
21 0
|
4月前
|
前端开发 JavaScript NoSQL
从前端到后端:构建全栈开发者的必备技能
随着互联网技术的不断发展,全栈开发者的需求日益增长。本文将介绍如何从前端到后端,掌握全栈开发所需的关键技能,包括前端框架的选择、后端语言的学习以及数据库的应用,帮助读者构建成为全面的技术专家。
|
4月前
|
JSON 前端开发 Java
⚠⚠⚠java后端开发中,前后端联调过程一些常见的低级/低端问题汇总⚠⚠⚠
⚠⚠⚠java后端开发中,前后端联调过程一些常见的低级/低端问题汇总⚠⚠⚠
|
4月前
|
安全 API Android开发
Android应用开发中实现动态权限请求的实践指南
【4月更文挑战第5天】 在现代安卓应用开发中,用户隐私和安全日益受到重视。自Android 6.0(API级别23)起,系统引入了动态权限模型,要求应用在运行时而非安装时请求特定权限。这一变化迫使开发者调整权限请求策略,以增强用户信任并确保应用的正常运行。本文将深入探讨如何在Android应用中有效实施动态权限请求,提供一套详细的实践流程,并通过代码示例阐释关键步骤。我们将讨论如何判断权限的必要性、向用户发起请求的最佳时机以及如何处理用户的授权结果。
|
新零售 人工智能 大数据
即时通讯丨即时聊天开发案例,即时通讯丨即时聊天系统开发功能逻辑/详细案例/逻辑项目/源码版
什么是零售?   零售在经济活动中是实现商品销售的最后环节,承担的主要功能就是满足消费者的需求,提供消费者需要的商品。产品在生产者手中或批发者手中,只是一种观念上的使用价值,只有进入消费领域才能更具备现实维度的使用价值,而零售就是将商品从流通领域进入消费领域的最后一个环节。
|
存储 机器学习/深度学习 Kubernetes
前端设计走查平台实践(后端篇)
设计师在进行走查的过程中,肉眼的比对偶尔会忽略一些细微部分,同时也会耗费设计师大量的精力,为了辅助设计同学能够更高效的进行设计走查,本文旨在通过设计走查平台在后端侧的实践总结下对于视觉稿还原程度比对的一些思路。
113 0
|
消息中间件 JavaScript 小程序
优秀后端都应该具备的开发好习惯!
优秀后端都应该具备的开发好习惯!