首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
前端学习(0)~vscode工具使用
2
前端学习(1)~html标签讲解(一)
3
前端学习(2)~html标签讲解(二)
4
前端学习(3)~html5详解(一)
5
前端学习(4)~html5详解(二)
6
前端学习(6)~html回顾
7
前端学习(7)~css学习(一):字体属性和文本属性
8
前端学习(8)~css学习(二):背景属性
9
前端学习(9)~css学习(三):样式表和选择器
10
前端学习(10)~css学习:选择器:伪类
11
前端学习(11)~css学习(五):样式表的继承性和层叠性
12
前端学习(12)~css学习(六):盒模型详解
13
前端学习(13)~css学习(七):浮动
14
前端学习(14)~css学习(八):定位属性
15
前端学习(15)~css3学习(九):选择器详解
16
前端学习(16)~css3属性学习(十)
17
前端学习(18)~css3属性学习(十一):动画详解
18
前端学习(19)~css3属性(十二):Flex布局图片详解
19
前端学习(20)~css布局(十三)
20
前端学习(21)~css学习:如何让一个元素水平垂直居中?
21
前端学习(22)~css问题讲解
22
前端学习(23)~js学习(一)
23
前端学习(24)~js学习(二):变量
24
前端学习(25)~js学习(三):变量的数据类型
25
前端学习(26)~js学习(四):基本数据类型vs引用数据类型
26
前端学习(27)~js学习(五): typeof和数据类型转换
27
前端学习(28)~js学习(六):运算符
28
前端学习(30)~js学习(七):流程控制语句-选择结构(if,switch)
29
前端学习(31)~js学习(八):流程控制语句:循环结构(for和while)
30
前端学习(32)~js学习(九):对象简介和对象的基本操作
31
前端学习(33)~js学习(十):函数
32
前端学习(34)~js学习(十一):作用域和变量提升
33
前端学习(35)~js学习(十二):预编译
34
前端学习(36)~js学习(十三):this
35
前端学习(37)~js学习(十四):对象的创建
36
前端学习(38)~js学习(十五):原型对象
37
前端学习(39)~js学习(十六):数组
38
前端学习(40)~js学习(十七):数组的常见方法&数组的遍历
39
前端学习(42)~js学习(十九):内置对象-Date
40
前端学习(43)~js学习(二十):内置对象 - String
41
前端学习(44)~js学习(二十一):包装类
42
前端学习(45)~正则表达式
43
前端学习(46)~事件简介
44
前端学习(47)~DOM简介和DOM操作
45
前端学习(48)~通过style对象获取和设置行内样式
46
前端学习(49)~offset相关属性和匀速动画(含轮播图实现)
47
前端学习(50)~事件的绑定和事件对象
48
前端学习(51)~事件的传播和事件冒泡
49
前端学习(52)~事件委托
50
前端学习(53)~键盘事件

前端学习(46)~事件简介

事件简介

事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间。对于 Web 应用来说,有下面这些代表性的事件:点击某个元素、将鼠标移动至某个元素上方、关闭弹窗等等。

JavaScript 是以事件驱动为核心的一门语言。JavaScript 与 HTML 之间的交互是通过事件实现的。

事件的三要素

事件的三要素:事件源、事件、事件驱动程序。

总结如下:

  • 事件源:引发后续事件的html标签。
  • 事件:js已经定义好了(见下图)。
  • 事件驱动程序:对样式和html的操作。也就是DOM。

也就是说,我们可以在事件对应的属性中写一些js代码,当事件被触发时,这些代码将会执行。

代码书写步骤如下:(重要)

  • (1)获取事件源:document.getElementById(“box”); // 类似于Android里面的findViewById
  • (2)绑定事件: 事件源box.事件onclick = function(){ 事件驱动程序 };
  • (3)书写事件驱动程序:关于DOM的操作。

最简单的代码举例:(点击box1,然后弹框)

代码语言:javascript
复制
<body>
<div id="box1"></div>

<script type="text/javascript">
    // 1、获取事件源
    var div = document.getElementById("box1");
    // 2、绑定事件
    div.onclick = function () {
        // 3、书写事件驱动程序
        alert("我是弹出的内容");
    }
</script>

</body>

下面针对这事件的三要素,进行分别介绍。

1、获取事件源的方式(DOM节点的获取)

获取事件源的常见方式如下:

代码语言:javascript
复制
var div1 = document.getElementById("box1");      //方式一:通过id获取单个标签

var arr1 = document.getElementsByTagName("div");     //方式二:通过 标签名 获得 标签数组,所以有s

var arr2 = document.getElementsByClassName("hehe");  //方式三:通过 类名 获得 标签数组,所以有s

2、绑定事件的方式

方式一:直接绑定匿名函数

代码语言:javascript
复制
<div id="box1" ></div>

<script type="text/javascript">
    var div1 = document.getElementById("box1");
    //绑定事件的第一种方式
    div1.onclick = function () {
        alert("我是弹出的内容");
    }
</script>

方式二:先单独定义函数,再绑定

代码语言:javascript
复制
 <div id="box1" ></div>

<script type="text/javascript">
    var div1 = document.getElementById("box1");
    //绑定事件的第二种方式
    div1.onclick = fn;   //注意,这里是fn,不是fn()。fn()指的是返回值。
    //单独定义函数
    function fn() {
        alert("我是弹出的内容");
    }
</script>

注意上方代码的注释。绑定的时候,是写fn,不是写fn()。fn代表的是整个函数,而fn()代表的是返回值。

方式三:行内绑定

代码语言:javascript
复制
<!--行内绑定-->
<div id="box1" onclick="fn()"></div>

<script type="text/javascript">

    function fn() {
        alert("我是弹出的内容");
    }

</script>

注意第一行代码,绑定时,是写的"fn()",不是写的"fn"。因为绑定的这段代码不是写在js代码里的,而是被识别成了字符串。

3、事件驱动程序

我们在上面是拿alert举例,不仅如此,我们还可以操作标签的属性和样式。举例如下:

点击鼠标时,原本粉色的div变大了,背景变红:

代码语言:javascript
复制
    <style>
        #box1 {
            width: 100px;
            height: 100px;
            background-color: pink;
            cursor: pointer;
        }
    </style>
</head>

<body>

<div id="box1" ></div>

<script type="text/javascript">
    var div1 = document.getElementById("box1");
    //点击鼠标时,原本粉色的div变大了,背景变红了
    div1.onclick = function () {
        div1.style.width = "200px";   //属性值要写引号
        div1.style.height = "200px";
        div1.style.backgroundColor = "red";   //属性名是backgroundColor,不是background-color
    }
</script>

上方代码的注意事项:

  • 在js里写属性值时,要用引号
  • 在js里写属性名时,是backgroundColor,不是CSS里面的background-color

onload事件

当页面加载(文本和图片)完毕的时候,触发onload事件。

举例:

代码语言:javascript
复制
<script type="text/javascript">
    window.onload = function () {
        console.log("smyhvae");  //等页面加载完毕时,打印字符串
    }
</script>

有一点我们要知道:js的加载是和html同步加载的。因此,如果使用元素在定义元素之前,容易报错。这个时候,onload事件就能派上用场了,我们可以把使用元素的代码放在onload里,就能保证这段代码是最后执行。

建议是:整个页面上所有元素加载完毕再执行js内容。所以,window.onload可以预防使用标签在定义标签之前。

事件举例:京东顶部广告栏

当鼠标点击右上角的X时,关掉整个广告栏,这就要用到事件。

代码实现如下:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .top-banner {
            background-color: pink;
            height: 80px;
        }
        .w {
            width: 1210px;
            margin: 10px auto;
            position: relative;
        }
        img {
            display: block;
            width: 1210px;
            height: 80px;
            background-color: blue;
        }
        a {
            position: absolute;
            top: 5px;
            right: 5px;
            color: #fff;
            background-color: #000;
            text-decoration: none;
            width: 20px;
            height: 20px;
            font: 700 14px/20px "simsum";
            text-align: center;
        }
        .hide {
            display: none!important;
        }
    </style>
</head>
<body>
    <div class="top-banner" id="topBanner">
        <div class="w">
            <img src="" alt=""/>
            <a href="#" id="closeBanner">×</a>
        </div>
    </div>


<script>
    //需求:点击案例,隐藏盒子。
    //思路:点击a链接,让top-banner这个盒子隐藏起来(加隐藏类名)。

    //1.获取事件源和相关元素
    var closeBanner = document.getElementById("closeBanner");
    var topBanner = document.getElementById("topBanner");
    //2.绑定事件
    closeBanner.onclick = function () {
        //3.书写事件驱动程序
        //类控制
//        topBanner.className += " hide"; //保留原类名,添加新类名
        topBanner.className = "hide";//替换旧类名(方式一)
//        topBanner.style.display = "none"; //方式二:与上一行代码的效果相同
    }

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

注意最后一行代码,这种方式会替换旧类名,意思是,不管之前的类名叫什么,都会被修改。

下一篇
举报
领券