美文网首页
js -- 事件

js -- 事件

作者: 像我这么帅的一般都是主角 | 来源:发表于2022-07-17 11:31 被阅读0次

事件绑定
事件绑定的三要素
1.事件源:和谁 做好约定
2.事件类型:约定一个什么 行为
3.事件处理函数 :当用户触发该行为的时候,执行什么代码
语法:
事件源.on事件类型 = 事件处理函数


image.png

事件对象
eg

div.onclick = function (e) {
                console.log(e);
            }

鼠标事件:
offsetX/Y 相对于触发事件的元素
clientX/Y 相对于浏览器的可视窗口
pageX/Y 相对于页面文档流
键盘事件:
键盘编码 事件对象.keyCode


image.png

案例 - 鼠标跟随

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>java script</title>
        <style>
            img {
                width: 50px;
                height: 50px;

                position: fixed;
                left: 0;
                top: 0;

            }
        </style>
    </head>

    <body>
        <img src="../img/vue.png" alt="">
        <script>
            var imgBox = document.querySelector('img')
            document.onmousemove = function (e) {
                // 拿到光标相对于窗口的坐标单位
                var x = e.clientX;
                var y = e.clientY;
                // 把 x y的赋值给img的left top
                imgBox.style.left = x + 5 +'px';
                imgBox.style.top = y + 5 +'px';
            }
        </script>
    </body>
</html>
image.png

浏览器响应事件的机制

浏览器窗口最先知道事件的发生
捕获阶段:从 window 按照结构子级的顺序传递到 目标
目标阶段:准确触发事件的元素接收到行为
冒泡阶段:从 目标 按照结构父级的顺序传递到 window
本次事件传播结束

阻止事件传播

语法:事件对象.stopPropagation()

事件委托

利用事件冒泡的机制 把自己的事件委托给结构父级中的某一层

案例 - 轮播图

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>java script</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
            ul, ol, li {
                list-style: none;
            }
            img {
                width: 100%;
                height: 100%;
                display: block;
            }
            .banner{
                width: 100%;
                height: 500px;
                position: relative;
                margin: 50px 0;
            }
            .banner > ul {
                width: 100%;
                height: 100%;

                position: relative;
            }
            .banner > ul > li {
                width: 100%;
                height: 100%;
                position: absolute;
                left: 0;
                top: 0;

                opacity: 0;

                transition: opacity .5s linear;
            }
            .banner > ul > li.active{
                opacity: 1;
            }
            .banner > ol {
                width: 200px;
                height: 30px;
                position: absolute;
                left: 30px;
                bottom: 30px;
                background-color: rgba(0,0,0, .5);

                display: flex;
                justify-content: space-around;
                align-items: center;
                border-radius: 15px;
            }
            .banner > ol > li {
                width: 20px;
                height: 20px;
                background-color: white;
                border-radius: 50%;
                cursor: pointer;
            }
            .banner > ol > li.active {
                background-color: orange;
            }
            .banner > div {
                width: 40px;
                height: 60px;
                position: absolute;
                top: 50%;
                transform: translateY(-50%);
                background-color: rgba(0,0,0,.5);

                display: flex;
                justify-content: center;
                align-items: center;
                font-size: 30px;
                color: #ffffff;
            }
            .banner > div.left {
                left: 0;
            }
            .banner > div.right{
                right: 0;
            }
        </style>
    </head>

    <body>
        <div class="banner">
            <!-- img -->
            <ul class="imgBox">
                <li class="active"><img src="../img/1.JPG" alt=""></li>
                <li><img src="../img/2.JPG" alt=""></li>
                <li><img src="../img/3.JPG" alt=""></li>
                <li><img src="../img/4.JPG" alt=""></li>
            </ul>
            <ol>
                <!-- 焦点区域 -->
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
            </ol>
            <!-- 左右切换按钮 -->
            <div class="left">&lt;</div>
            <div class="right">&gt;</div>
        </div>
        <script>
            // 获取到所有承载图片的li 和所有承载焦点的li
            var imgs = document.querySelectorAll('ul > li');
            var points = document.querySelectorAll('ol > li');
            var banner = document.querySelector('banner');
            // 表示是第几张 默认为0
            var index = 0;
            //切换函数,参数为true -- 下一张,参数为false -- 上一张,参数为数字 -- 切换到指定索引的那一张
            function changeOne(type) {
                // 1. 让当前这一这张消失
                imgs[index].className = '';
                points[index].className = '';
                // 2. 根据type传递来的参数,来切换index的值
                if( type === true){
                    index ++;
                }else if ( type === false) {
                    index --;
                }else{
                    index = type;
                }
                // 判定 index的边界值
                if(index >= imgs.length){
                    index = 0;
                }
                if(index < 0){
                    index = imgs.length - 1;
                }
                // 3. 让改变后的一张显示出来
                imgs[index].className = 'active';
                points[index].className = 'active';
            }
            // 给轮播图区域盒子绑定点击事件
            banner.onclick = function (e) { //有bug
                // 判断点击的是什么
                if(e.target.className === 'left'){
                    changeOne(false);
                }
                if(e.target.className === 'right'){
                    changeOne(true);
                }
                if(e.target.dataset.name === 'point'){
                    var i = e.target.dataset.i - 0;
                    changeOne(i);
                }
            }
            // 自动切换
            setInterval(function () {
                changeOne(true);
            },5000)
        </script>
    </body>
</html>

相关文章

  • js(事件)

    js 事件js事件.png

  • js操作页面三步骤

    js操作页面三步骤 js事件 鼠标事件 文档事件 键盘事件 表单事件 事件对象 js操作内容 js操作样式 页面转...

  • 事件

    1、鼠标的移入移除js部分 2、鼠标事件js部分 3、事件对象js部分 4、键盘事件js部分 5、输入框事件js部...

  • 20、jQuery 事件机制

    20、jQuery 事件机制 原生js事件与jQuery事件: (1)用原生的js给div注册事件 原生js注册相...

  • javascript 中的事件机制

    js之事件机制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驱动...

  • JavaScript的事件机制详解

    【js事件详解】js事件封装函数,js跨浏览器事件处理机制 一、事件流 事件流描述的是从页面中接受事件的顺序。IE...

  • JS的事件绑定和事件流模型

    一、JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout...

  • js事件 事件冒泡

    js事件的分类 事件的类型:有鼠标事件,键盘事件,HTML事件,变化事件 注意:js中的事件前面要加on(如:on...

  • JS事件相关基础

    js事件: 键盘事件: JS中的事件冒泡和事件捕获: 1、事件冒泡。如下代码: 点击button事件,连同父元素绑...

  • 2019-01-11 input框事件,jQuery其他事件,自

    js事件的分类事件的类型:有鼠标事件,键盘事件,HTML事件,变化事件注意:js中的事件前面要加on (如:onc...

网友评论

      本文标题:js -- 事件

      本文链接:https://www.haomeiwen.com/subject/iunrirtx.html