前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >js事件基础

js事件基础

作者头像
不愿意做鱼的小鲸鱼
发布于 2022-08-24 06:13:03
发布于 2022-08-24 06:13:03
3.3K00
代码可运行
举报
文章被收录于专栏:web全栈web全栈
运行总次数:0
代码可运行

事件绑定

什么是事件绑定? 可以在一个事件上增加多个函数,详细如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
        <input type="button" name="" id="btn1" value="按钮" />
        <script type="text/javascript">
            var btn=document.getElementById("btn1");
            // 事件绑定方法:attachEvent(事件,函数):兼容火狐和IE
            /* btn.attachEvent(onclick,function(){
                alert("被点击了a")
            })
            btn.attachEvent(onclick,function(){
                alert("被点击了b")
            }) */

            //事件绑定方法:addEventListener(事件名,函数布尔值):兼容谷歌,360等
            btn.addEventListener("click",function(){
                alert("被点击了a")
            });
            btn.addEventListener("click",function(){
                alert("被点击了b")
            })

            //没有用事件绑定,前面一个事件被覆盖
            /* btn.onclick=function(){
                alert("被点击了a")
            }
            btn.onclick=function(){
                alert("被点击了b")
            } */
        </script>
    </body>

可以实现点击一次按钮,执行两个函数里面的内容, 需要注意的是attachEvent方法和addEventListener的使用,这是一个兼容性的问题 兼容性:IE支持attachEvent而不支持addEventListener,否则会报错;而谷歌火狐则支持addEventlistener。所以存在兼容性的问题。

事件冒泡

事件冒泡就是当事件的对象有父子级关系时,当执行子级事件后,父级事件也会因为事件冒泡,也会执行,因此,大多数时候,事件冒泡需要消除。 使用event.cancelBubble = true;方法来消除事件冒泡 案例如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
        <button type="button" id="btn">显示</button>
        <div id="box">

        </div>
        <script type="text/javascript">
            var btn = document.getElementById("btn");
            var div = document.getElementById("box")
            btn.onclick = function(e) {
                var oEvent = e || event;
                div.style.display = "block";
                // alert("按钮被点击了");

                //阻止事件冒泡
                oEvent.cancelBubble = true;
            }
            document.onclick = function() {
                div.style.display = "none";
                // alert("document被点击了");
            }
        </script>
    </body>

事件对象的兼容性

在火狐或者谷歌浏览器下,使用事件的方法是将函数中传进来的e; 而在IE浏览器下,使用事件不需要传进e,直接使用event。 所以为了避免事件的兼容性问题 var oEvent = e || event; 一般使用这样的方法来消除浏览器对事件的兼容

鼠标点击事件

鼠标的位置

oevent.clientX:返回鼠标的横坐标的位置 oevent.clientY:返回鼠标的纵坐标的位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
        <script type="text/javascript">
            document.onclick=function(e){
                //IE支持event
                //火狐不支持event,必须从函数中传进一个事件
                //所以一般避免兼容性,会使用var oevent=e||event;
                var oevent=e||event;
                alert("鼠标横坐标是:"+oevent.clientX+"  纵坐标是:"+oevent.clientY)
            }
        </script>
    </body>

鼠标跟踪

鼠标跟踪是实现对象跟着鼠标移动,其实就是在onmousemove函数中将改对象的横纵坐标都赋值为鼠标的横纵对象 实现如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            document.onclick=function(e){
                //IE支持event
                //火狐不支持event,必须从函数中传进一个事件
                //所以一般避免兼容性,会使用var oevent=e||event;
                var oevent=e||event;
                alert("鼠标横坐标是:"+oevent.clientX+"  纵坐标是:"+oevent.clientY)
            }
        </script>
    </body>
</html>

鼠标跟踪小案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            div {
                width: 10px;
                height: 10px;
                background-color: #FF69B4;
                position: absolute;
            }
        </style>
    </head>
    <body>

        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>


        <script type="text/javascript">
            function getPos(e) {
                //避免鼠标滚动
                var scorllTop = document.documentElement.scrollTop || document.body.scrollTop;
                var scorllLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
                return {
                    x: e.clientX + scorllLeft,
                    y: e.clientY + scorllTop
                };
            }

            document.onmousemove = function(e) {
                var div = document.getElementsByTagName("div");
                var oEvent = e || event;
                var pos = getPos(oEvent);
                for (var i = div.length - 1; i > 0; i--) {
                    div[i].style.left = div[i - 1].offsetLeft + "px";
                    div[i].style.top = div[i - 1].offsetTop + "px";
                }
                div[0].style.left = pos.x + "px";
                div[0].style.top = pos.y + "px";

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

实现效果如下

(ps:可以将div小方块换成自己喜欢的图片 ^ _ ^ )

小案例——自定义右菜单

1.实现点击鼠标右键弹出自己的菜单 2.实现点击空白时,菜单消失 3.实现点击菜单时,菜单不会消失(事件冒泡)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            ul{
                width: 100px;
                height: 150px;
                background: #ADD8E6;
                list-style: none;
                position: absolute;
                padding-left: 5px;
                display: none;
            }
            li{

            }
        </style>
    </head>
    <body>
        <ul>
            <li>abc</li>
            <li>abc</li>
            <li>abc</li>
            <li>abc</li>
        </ul>

        <script type="text/javascript">
            //点击鼠标右键弹出自己的菜单
            document.oncontextmenu=function(e){
                var oEvent=e|| event;

                ull[0].style.display="block";
                ull[0].style.left=oEvent.clientX+"px";
                ull[0].style.top=oEvent.clientY+"px";
                //阻止默认行为
                return false;



            }
            //点击空白时,菜单消失
            document.onclick=function(){
                var ull=document.getElementsByTagName("ul");
                ull[0].style.display="none";
            }
            //点击菜单时,菜单不会消失
            var ull=document.getElementsByTagName("ul");
            ull[0].onclick=function(e){
                var oEvent=e|| event;
                //阻止冒泡
                oEvent.cancelBubble = true;
            }

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

效果如下

键盘事件

键盘控制移动

使用 oEvent.keyCode=="数字" 来监听按下了键盘的哪一个键 数字是ASCII码值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
        <div id="box">

        </div>

        <script type="text/javascript">
            document.onkeydown=function(e){
                var oEvent=e|| event;
                var div =document.getElementById("box");
                if(oEvent.keyCode==37){
                    div.style.left=div.offsetLeft-10+"px";
                }
                else if(oEvent.keyCode==39){
                    div.style.left=div.offsetLeft+10+"px";
                }
            }

        </script>
    </body>

可以控制div方块左右移动

键盘提交

就是按下 回车 或者 ctr + 回车 键,来对信息进行提交 本案例借用了前几篇文档中的运动封装:animate.js 代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }

            .ull {
                width: 300px;
                height: 400px;
                background-color: lightblue;
                /* 超出部分显示滚动条 */
                margin: 20px auto;
                border: 5px solid #8A2BE2;
                overflow-y: auto;
                /* 让字符换行显示 */
                word-wrap: break-word;


            }

            .ull li {
                border-bottom: 1px dashed #999;
                list-style: none;
                padding: 4px;
                padding-left: 20px;
                /* overflow: hidden; */
                opacity: 0;

            }

            .txt {
                margin: 20px 10px;
            }
        </style>
        <script src="封装animate.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <textarea rows="4" cols="40" class="txt"></textarea>
        <button type="button" class="btn">发布</button>
        <ul class="ull">

        </ul>

        <script type="text/javascript">
            //获取各个元素的节点
            var Otext = document.querySelector(".txt");
            var Obtn = document.querySelector(".btn");
            var Oul = document.querySelector(".ull");

            // 点击发布按钮,就将文本框的内容插入到容器中
            Obtn.onclick = function() {
                var Oli = document.createElement("li");
                Oli.innerHTML = Otext.value;
                Otext.value = "";
                if (Oul.children.length > 0) {
                    Oul.insertBefore(Oli, Oul.children[0]);
                } else {
                    Oul.appendChild(Oli);
                }
                //运动
                var iHeight = Oli.offsetHeight;
                Oli.style.height = "0";
                animate(Oli, {
                    height: iHeight
                }, function() {
                    animate(Oli, {
                        opacity: 100
                    })
                })
            }

            //实现键盘提交
            Otext.onkeydown = function(e) {
                var oEvent = e || event;
                //按ctrl加回车提交
                if (oEvent.keyCode == 13 && oEvent.ctrlKey) {
                    var Oli = document.createElement("li");
                    Oli.innerHTML = Otext.value;
                    Otext.value = "";
                    if (Oul.children.length > 0) {
                        Oul.insertBefore(Oli, Oul.children[0]);
                    } else {
                        Oul.appendChild(Oli);
                    }
                    //运动
                    var iHeight = Oli.offsetHeight;
                    Oli.style.height = "0";
                    animate(Oli, {
                        height: iHeight
                    }, function() {
                        animate(Oli, {
                            opacity: 100
                        })
                    })
                }
            }
        </script>

    </body>
</html>

实现效果如下

只能输入数字的文本框

该文本框要实现 1.只能输入数字:可以按大键盘上的数字,也可以按小键盘的数字 2.可以进行回删,按backspace键 3.按方向键可以移动光标位置 实现代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<body>
        <input type="text" name="" id="txt" value="" />
        <script type="text/javascript">
            var otxt = document.getElementById("txt");
            otxt.onkeydown = function(e) {
                var oEvent = e || event;
                // alert(oEvent.keyCode)
                //只能输入数字
                if (oEvent.keyCode != 8 && oEvent.keyCode != 37 && oEvent.keyCode != 39 && (oEvent.keyCode < 48 || oEvent.keyCode >
                        57) && (oEvent.keyCode < 96 || oEvent.keyCode > 105)) {
                    //阻止默认事件
                    return false;
                }
            }
        </script>
    </body>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端day16-JS(WebApi)学习笔记(事件补充、事件冒泡与捕获)
var code = e.keyCode || e.charCode || e.which;
帅的一麻皮
2020/05/05
1.8K0
完美运动框架(新浪微博小案例)
animate大家都很熟悉,完美运动框架就是能将自己封装好的animate能实现想要的运动效果,可以同时改变一个对象的各种属性,并且改变之后还能够实现接着需要改变的属性,即是运动,比如一个div盒子向有运动了一段距离,还能自己运动回来回来,就像是一种链式运动,这种运动框架能解决90%网页中的运动效果。
不愿意做鱼的小鲸鱼
2022/08/24
4450
完美运动框架(新浪微博小案例)
【JavaScript】JavaScript开篇基础(5)
方法监听注册方式:addEventListener() 特点:同一个元素同一个事件可以注册多个监听器(监听处理函数function),按注册顺序依次执行
E绵绵
2024/11/13
760
【JavaScript】JavaScript开篇基础(5)
面试官:什么是js中的事件流以及事件模型?
我们先从字面意义上理解,事件我们已经知道了是什么,那流呢?我们看看百度对于流的解释
inline705
2022/03/01
2K0
面试官:什么是js中的事件流以及事件模型?
前端基础-事件
onclick 其实就是html元素的一个属性,而属性的值需要是 一段可执行的JS代码
cwl_java
2020/03/26
1.3K0
前端的CRUD增删改查的小例子
前端的CRUD增删改查的小例子 1.效果演示 juzi.gif 2.相关代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U
Dream城堡
2018/10/09
6660
前端的CRUD增删改查的小例子
【JS】395-重温基础:事件
事件流描述的是从页面中接收事件的顺序,通常有这样两种完全相反的事件流概念:事件冒泡流(IE团队提出)和事件捕获流(网景团队提出)。
pingan8787
2019/11/05
1K0
JS篇(007)-事件委托是什么
- 适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。
齐丶先丶森
2022/05/12
1.7K0
【如果你要学JS XV】——趣学[ 阻止冒泡事件、常见的鼠标事件和键盘事件 ]
简单来说就是this指向的是绑定事件的元素,e.target返回的是所触发事件的元素
像素人
2023/12/28
8110
【如果你要学JS XV】——趣学[ 阻止冒泡事件、常见的鼠标事件和键盘事件 ]
JavaScript 学习总结
Java和Javascript的区别就像印度和印度尼西亚的区别,名字中有点相同的东西。
三杯水Plus
2018/11/14
1.4K0
深入理解事件
javascript 给 DOM 绑定事件处理函数总的来说有2种方式:在 html 文档中绑定、在 js 代码中绑定。下面的方式1、方式2属于在 html 中绑定事件,方式3、方式4和方式5属于在js代码中绑定事件,其中,方式4和5属于事件监听,而方式5是最推荐的做法。
Chor
2019/11/08
8420
事件
事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。如果JavaScript关注特定类型事件,那么它可以注册当这类事件发生时要调用的句柄。事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时... 事件流 事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层
小胖
2018/06/27
1.4K0
js事件委托的理解 转
http://www.cnblogs.com/liugang-vip/p/5616484.html  这篇文章写的很详细,非常感谢作者。
tianyawhl
2019/04/04
1K0
JS事件冒泡及阻止
当一个元素接收到事件的时候,会把他接收到的事件传给自己的父级,一直到window,当然其传播的是事件,绑定的执行函数并不会传播,如果父级没有绑定事件函数,就算传递了事件,也不会有什么表现,但事件确实传递了。 事件冒泡的原因是事件源本身可能没有处理事件的能力,即处理事件的函数并未绑定在该事件源上。它本身并不能处理事件,所以需要将事件传播出去,从而能达到处理该事件的执行函数。
WindRunnerMax
2020/08/27
6.6K0
js一些案例的使用
1 延迟提示框的使用 方式一: <!DOCTYPE html> <html> <head> <title>延迟提示框的使用1</title> <style> #div1{ background:red; width:200px; height:30px; } #div2{ background:#ccc; width:150px; height:20px; margin:10px; display:none; } </style>
用户5927264
2019/07/31
6120
深入理解 DOM 事件机制
本文主要介绍 DOM 事件级别、DOM 事件模型、事件流、事件代理和 Event 对象常见的应用,希望对你们有些帮助和启发!
小生方勤
2019/06/02
2.8K1
开发者需要掌握的JS事件
JavaScript事件 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行。事件是基于对象存在,事件通常可以修饰多种对象。 1.为对象添加事件的2种方式 ①:在HTML元素中添加对象的事
Java帮帮
2018/03/19
2.5K0
开发者需要掌握的JS事件
day03_js学习笔记_03_js的事件、js的BOM、js的DOM
day03_js学习笔记_03_js的事件、js的BOM、js的DOM ============================================================================= ============================================================================= 涉及到的知识点有: 五、js的事件 1、js的常用事件 onclick
黑泽君
2018/10/11
28.1K0
键盘事件
// onkeydown键盘按下的时候触发 // onkeyup键盘抬起的时候触发 // ev.keyCode:数字类型,键盘按键的值 键值 // ctrlKey altKey shiftKey 布尔类型 // 当一件事情发生的时候,如果是ctrl || alt || shift是按下的状态,返回true,否则返回false //document.onkeydown= function (ev) { // var ev=ev||event; // al
河湾欢儿
2018/09/06
1.4K0
js事件流机制
在JavaScript中事件流是指一个事件沿特定数据结构传播的一个过程。整个事件流总共包含三个阶段(从dome2来说):1.事件捕获阶段、2.处于事件目标阶段、3.事件冒泡阶段。下面我们来看一个图,只要是谈到事件流都会看到的一个图:
OECOM
2020/07/01
1.5K0
相关推荐
前端day16-JS(WebApi)学习笔记(事件补充、事件冒泡与捕获)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验