JavaScript常用事件集合,前端小白必备(写的很详细,建议收藏)

简介: 笔记

1. 文档加载事件


  • 此事件使用频率很高,务必掌握
  • 文档加载完成之后会做的事情

1.1 ready()

  • ready(): 表示文档结构已经加载完成(不包含图片等非文字媒体文件)
// 写法一
$(document).ready(function(){
  //do something
})

1.2 onload()

  • onload(): 包含图片等文件在内的所有元素都加载完成。
  • ready() 在onload()之前加载
// 写法二
window.onload = function(){
  //do something
}


2. 鼠标事件


HTML结构如下(记得先复制这个):

<!DOCTYPE html>
<html>
    <head>
            <meta charset="utf-8" />
            <style>
                .div2,.mousemove{
                    width: 200px;
                    height: 200px;
                    background: orange;
                    color: white;
                }
                .div2{
                    background: green;
                    display: none;
                    transition: all 0.5s;
                }
            </style>
    </head>
    <body>
        <h1>鼠标事件</h1>
        <h3>mousemove: 精交互</h3>
        <div class="mousemove" onmousemove= "bodyFn(this)">
            mousemove
        </div>
        <h3>鼠标双击事件</h3>
        <button 
            id="dbBtn" 
            ondblclick="dbFn()"
            onclick="clickFn()">双击事件</button>
        <h3>鼠标悬浮事件</h3>
        <button id="btn">悬浮显示div</button>
        <div class="div2" id="div2">
            原有文字
        </div>
        <h3>键盘事件</h3>
        <input placeholder="请输入" onkeyup="keyFn(event)"/>
    </body>
</html>

2.1 鼠标悬浮事件

let btn= $my("btn");
let div2 = $my("div2");
// 鼠标悬浮事件
btn.onmouseover =  function(){
    div2.style.display = "block"; 
}
// 鼠标离开事件
btn.onmouseout =  function(){
    div2.style.display = "none"; 
}

此处的 $my() 已经进行过封装,这样很方便,代码如下:

function $my(id){
    return document.getElementById(id);
}

2.2 点击事件

 let timeId = null;     
 // 单击事件       
 function clickFn(){
      clearTimeout(timeId);
      timeId = window.setTimeout(function(){
          console.log("单击事件");
      }, 500)
  }
  // 双击事件
  function dbFn(){
      clearTimeout(timeId)
      console.log("双击事件")
  }

2.3 常用的回车事件

// 键盘事件
function keyFn(event){
    console.dir(event);
}
// 监听窗口回车事件
document.onkeyup = function(event){
   console.log(event.keyCode);
    if(event.keyCode === 13){
        alert("回车事件")
    }
}


3. 获取浏览器类型,手机机型(容易出问题的地方)


3.1 获取浏览器类型

let userAgent= navigator.userAgent;
console.log(userAgent);
if (userAgent.indexOf("Opera") > -1) {  // 判断是否是Opera浏览器
   console.log("Opera");
};
if (userAgent.indexOf("Firefox") > -1) { // 判断是否是Firefox浏览器
   console.log("Firefox");
}
if (userAgent.indexOf("Chrome") > -1) { // 判断是否是Chrome浏览器
   console.log("Chrome");
}
if (userAgent.indexOf("Safari") > -1) { // 判断是否是Safari浏览器
   console.log("Safari");
}
if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1) {
   console.log("IE");      // 判断是否是IE浏览器
};

3.2 判断手机机型(移动端解决兼容问题常用)

// 检测机型 安卓还是苹果
function getAdr(){
    //获取机型信息
    let type = navigator.userAgent;
    let isAndroid = type.indexOf("Android") > -1 || 
                    type.indexOf("Adr") > -1;
    return isAndroid;
}
console.log(getAdr()); // true为安卓 false为苹果


4. 事件冒泡与事件委托(面试重点)


HTML文件代码如下(记得先复制这个

<!DOCTYPE html>
<html>
 <head>
         <meta charset="utf-8" />
         <style>
             .div1{
                 width: 500px;
                 height: 100px;
                 border: 1px solid;
             }
             .p1{
                 background: orange;
             }
         </style>
 </head>
 <body>
     <h1>事件冒泡</h1>
     <div class="div1" onclick="divFn(this)">
         div的文本
         <p class="p1" onclick="pFn()">我是段落标签</p>
     </div>
     <h1>事件委托</h1>
     <ul id="ul1">
         <li>1</li>
         <li>2</li>
         <li>3</li>
         <li>4</li>
     </ul>
     <button onclick="addLi()">增加一个li</button>
 </body>
</html>

4.1 阻止事件冒泡

  • 事件冒泡:当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window
  • 显然,这是错误的,需要做处理
// 如果不做处理,点击p标签时会触发div的点击事件
function divFn(e){
     console.log("div被点击了");
}
function pFn(e){
     console.log("段落被点击了");
     window.event ? 
     window.event.cancelBubble = true : 
     // 阻止事件冒泡
     e.stopPropagation();
}

12.png 


4.2 事件委托


事件委托:把一个元素响应事件(点击事件、悬浮事件等等)的函数委托给另一个元素

举两个例子:

隔壁老王和老婆分手了,所以只能委托我去爱她老婆(好坏哦~)

放公司的快递到了,因为我请假爱老王老婆去了,所以只能委托前台签收一下

在JS中,这是一种好的处理方式:大大的减少dom操作,提升性能

不用事件委托,你得这么处理:


循环添加事件,显然,这是很蠢的

for (var i=0;i<aLi.length;i++) {
    aLi[i].onmouseover = function() {
        this.style.background = 'orange';
}
    aLi[i].onmouseout = function(){
        this.style.background = '';
    }
}

事件委托的写法

let oUl = document.getElementById('ul1');
let aLi = oUl.children;
oUl.onmouseover = function(ev){
    let ev = ev || window.event;
    let oLi = ev.srcElement || ev.target;
    if(oLi.nodeName.toLowerCase() == 'li'){
        oLi.style.background = 'orange';
    }
}
oUl.onmouseout = function(ev){
    let ev = ev || window.event;
    let oLi = ev.srcElement || ev.target;
    if(oLi.nodeName.toLowerCase() == 'li'){
        oLi.style.background = '';
    }                
}
// 后面添加的子节点也会有添加的事件
function addLi(){
   let html = document.createElement("div");
   html.innerHTML = '<li>5</li>';
   oUl.appendChild(html);
}


目录
相关文章
|
12天前
|
JavaScript 前端开发
JavaScript 事件
JavaScript 事件
24 2
|
8天前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
29 3
|
15天前
|
前端开发 JavaScript
前端ES5 | js —添加元素方法
前端ES5 | js —添加元素方法
|
11天前
Nest.js 实战 (十二):优雅地使用事件发布/订阅模块 Event Emitter
这篇文章介绍了在Nest.js构建应用时,如何通过事件/发布-订阅模式使应用程序更健壮、灵活、易于扩展,并简化服务间通信。文章主要围绕@nestjs/event-emitter模块展开,这是一个基于eventemitter2库的社区模块,提供了事件发布/订阅功能,使得实现事件驱动架构变得简单。文章还介绍了如何使用该模块,包括安装依赖、初始化模块、注册EventEmitterModule、使用装饰器简化监听等。最后总结,集成@nestjs/event-emitter模块可以提升应用程序的事件驱动能力,构建出更为松耦合、易扩展且高度灵活的系统架构,是构建现代、响应迅速且具有高度解耦特性的Nest.
|
20天前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
27 1
|
6天前
|
JavaScript 前端开发
|
20天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
45 0
|
20天前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
59 0
|
20天前
|
开发者 Android开发 iOS开发
Xamarin开发者的神器!揭秘你绝不能错过的插件和工具,让你的开发效率飞跃式提升
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程,保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用介绍 Xamarin.Forms 的基本功能和工作原理。首先配置 Visual Studio 开发环境,然后创建并运行一个包含标题、按钮和消息标签的示例应用,展示如何定义界面布局及处理按钮点击事件。这帮助开发者快速入门 Xamarin.Forms,提高跨平台应用开发效率。
30 0
|
20天前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
42 0