Interfaz web --- evento js

evento js (evento)

(El nacimiento de js se basa en la programación dirigida por eventos)

(1) evento

El usuario actúa a través de varios comportamientos (botones, clics del mouse, desplazamiento del mouse...) para provocar la ejecución de códigos js relacionados.

Tres elementos de un evento:

  • Origen del evento: la persona que se desencadena por el evento, por lo general vincula el evento
  • Objeto de evento (evento): Este objeto contiene toda la información relacionada con el evento
  • Controlador de eventos: el código que maneja el evento

<1> Definir eventos (tres formas)

[1] Modo DOM0: se requiere la etiqueta html en el atributo xxxx para configurar

Desventajas: js y html están acoplados, lo que viola el principio de separación de tres capas de w3c; de esta manera, el objeto de evento no se puede obtener en la función de procesamiento de eventos; el puntero this en la función de evento apunta al objeto winodw

PD:

test01(this) // Al enlazar un evento, puede pasar esto a la función de evento, y la función de evento necesita pasar este puntero this;

console.log(this) // y this en la función apunta directamente al objeto de la ventana

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        function test01(node){
            alert("这里是美女,只不过你看不见")
        }
        // console.log(this);
        console.log(node);
        // node:事件源
    </script>
    <title>js事件</title>
</head>
<body>
    <button onclick="test01(this);">点击一下,你就知道</button>
    <!-- 双引号中,引入javascript代码 -->
</body>
</html>

[2] modo DOM2

Implica principalmente dos métodos para manejar la operación de especificar y eliminar controladores de eventos: addEventListener() y removeEventListener() .

  • Vinculación de eventos dinámicamente a través de objetos DOM
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM2</title>
</head>
<body>
    <button id="box">美女不在这</button>
    
    <a href="#" class="msg">可以在这找找看</a>
    <a href="#" class="msg">可以在这找找看</a>

    <a href="#" class="sss">你喜欢美女吗</a>
    <a href="#" class="sss">你喜欢美女吗</a>
    <a href="#" class="sss">你喜欢美女吗</a>
    <a href="#" class="sss">你喜欢美女吗</a>
    <script>

        // DOM对象()
        let box = document.getElementById("box");

        // 通过DOM对象,动态绑定事件
        box.onclick = function (ev){
            // PS:动态绑定事件的方式,第一个参数就是事件对象
            alert("那美女在哪?")
            console.log(ev); // 事件对象
            console.log(ev.target); // 事件源
            console.log(this); // 事件源,这种事件中,this指向事件源
            console.log(`x轴坐标${ev.pageX},y轴坐标${ev.pageY}`)
            
        }

        // 用className单个绑定,需确定下标
        let msg = document.getElementsByClassName("msg");
        console.log(msg);
        msg[0].onclick = function(){
            alert("这里也没有美女。")
        }

        // 多个同时绑定,需采用循环
        let sss = document.getElementsByClassName("sss");
        for(let i = 0;i < sss.length;i++){
            sss[i].onclick = function(){
                alert(`md,我喜欢的不得了,这是我第${i + 1}个按钮`);
            }
        }
    </script>
</body>
</html>

  • También hay una forma de escuchar eventos, vincular eventos
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绑定事件</title>
</head>
<body>

    <a href="http://www.baidu.com" id="go">百度</a>
    <button id="box">这里有个祢豆子</button>
    <script>
        let box = document.getElementById("box");
        // addEventListener:事件监听
        box.addEventListener("click",function(e){
            alert("点我干嘛");
            console.log(this);
            console.log(e.target);

            // 这个方法会取消冒泡 IE浏览器
            // e.cancelBubble();

            // 停止标签继续向上冒泡(阻止冒泡)  w3c
            // ev.stopPropagation();

        },true); // true:第三个参数true决定是否开启捕获流

        document.querySelector("#go").onclick = function(ev){

            alert("还是会去百度");
            // 阻止标签的默认行为
            ev.preventDefault();

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

[3] Controladores de eventos HTML

Agregue controladores de eventos directamente en el código HTML

<input id= "btn" value= "按钮" type= "button" onclick= "showmsg();" >
  <script>
   function showmsg(){
   alert( "HTML添加事件处理" );
   }
  </script>

<2> Clasificación de flujos de eventos

 

Flujo burbujeante : burbujeo significa que el evento es recibido inicialmente por el elemento más específico (el nodo con el nivel de anidamiento más profundo en el documento), y luego se propaga hasta el nodo menos específico (documento)

Flujo de captura : la captura es cuando los nodos menos específicos reciben los eventos primero y los nodos más específicos al final.

(2) Eventos comunes

evento contenido
abortar Se interrumpió la carga de la imagen
en la falta de definición el elemento pierde el foco
en el cambio El usuario cambia el contenido del campo
ondblclick haga doble clic con el mouse en un objeto
onerror Ocurrió un error al cargar el documento o la imagen
enfocado el elemento se enfoca
onkeydown Se presiona una tecla del teclado
onkeypress Se presiona o se mantiene presionada una tecla del teclado
encendido Se suelta una tecla del teclado
cargar Una página o imagen ha terminado de cargarse
en el mouse hacia abajo Se presiona un botón del ratón
onmovemove el raton se mueve
fuera del ratón El ratón se mueve de un elemento.
el ratón por encima El ratón se mueve sobre un elemento.
en el mouse arriba Se suelta un botón del ratón
reinicio se hace clic en el botón de reinicio
sobredimensionar se cambia el tamaño de la ventana o el marco
en seleccionar se selecciona el texto
onsubmit Se hace clic en el botón enviar
en descarga página de salida del usuario

(3) Ejemplo de código:

Ejemplo 1: Lotería

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style >
        * {
            margin: 0;
            padding: 0;
        }
        .container {
            width: 800px;
            height: 800px;
            border: 1px dashed rebeccapurple;
            position: absolute;
            left: 50%;
            margin-left: -400px;
            text-align: center;
            line-height: 100px;
        }
        .container .box, .box2 {
            width: 300px;
            height: 300px;
            background: greenyellow;
            border-radius: 50%;
            margin: auto;
            margin-top: 50px;
            text-align: center;
            line-height: 300px;
        }
        .box2 {
            background: deepskyblue;
        }
        #show {
            font-size: 30px;
            color: white;
            font-weight: bold;
        }
        #start {
            width: 300px;
            height: 50px;
            background: palegreen;
        }
    </style>
    <title>抽奖</title>
</head>
<body>
    <div class="container">
        <div class="box" id="box">
            <span id="show">
                小礼品
            </span>
        </div>
        <button id="start" onclick="start()">点击开始</button>
    </div>

    <script>
        let start = document.querySelector("#start");
        let show = document.querySelector("#show");
        let timer = null;
        let box = document.querySelector("#box");
        let isStop = false;
        let nums = ["iphone14","100w","1000w","杯子","大花棉袄","充电宝","欠我五元","谢谢惠顾"];

        start.onclick = function(){
            if(!isStop){
                isStop = true;
                timer = setInterval(function(){
                let index = Math.floor(Math.random()*nums.length);
                show.innerHTML = nums[index];
                box.className = "box2";
                start.textContent = "停止抽奖";
            },100);
            } else{
                isStop = false;
                window.clearInterval(timer);
                box.className = "box";
                start.textContent = "开始抽奖";

            }

        }
    </script>

</body>
</html>

Ejemplo 2: arrastrando div

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .box{
            width: 150px;
            height: 150px;
            border: 1px dashed rosybrown;
            position: absolute; /* 进行绝对定位 */
            left: 300px;
            top: 200px;

        }
    </style>
    <title>div的拖动</title>
</head>
<body>
    <div class="box"></div>

    <script>
        let _box = document.querySelector(".box");
        _box.onmousedown = function(e){
            let x = e.pageX-_box.offsetLeft;
            let y = e.pageY-_box.offsetTop;

            document.onmousemove = function(ev){
                let x2 = ev.pageX - x;
                let y2 = ev.pageY - y;

                _box.style.left = x2 + "px";
                _box.style.top = y2 + "px";

            }
        }
        _box.onmouseup = function(){
            document.onmousemove = null;
        }
    </script>
</body>
</html>

Supongo que te gusta

Origin blog.csdn.net/weixin_62443409/article/details/131027383
Recomendado
Clasificación