2.DOM-事件基础(注册事件、tab栏切换)(案例:注册、轮播图)

案例

注册事件


    <!-- //disabled默认情况用户不能点击 -->
    <input type="button" value="我已阅读用户协议(5)" disabled>
    <script>
        // 分析:
        // 1.修改标签中的文字内容
        // 2.定时器
        // 3.修改标签的disabled属性
        // 4.清除定时器
        // 5.条件判断

        // 结论:以上的知识点都放在定时器中完成

        // 代码实现
        // 1.获取按钮标签
        let btn = document.querySelector('input')
        // 2.定义一个变量保存开始值
        let num = 5;
        // 3.数字要递减,放到定时器中
        let timeId = setInterval(function () {
            // 数字递减
            --num
            // 修改标签中的文字内容
            btn.value = `我已阅读用户协议(${num})`;
            // 6.判断数字是否小于0
            if (num < 0) {
                // 7.修改按钮上的文字
                btn.value = '同意';
                // 8.修改按钮为可点击状态
                btn.disabled = false
                // 9.停止定时器
                clearInterval(timeId);
            }

        }, 1000)

    </script>

在这里插入图片描述

轮播图

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }

        .slider {
            width: 450px;
            height: 300px;
        }

        .slider img {
            width: 100%;
        }

        .slider-footer {
            height: 10px;
            width: 450px;
        }

        ul li {
            height: 10px;
            width: 20px;
            /* border-radius: 50%; */
            float: left;
            margin-left: 30px;
            list-style: none;
            background-color: gray;
        }

        .active {
            background-color: red;
        }
    </style>
</head>

<body>

    <div class="slider">
        <div class="slider-wrapper">
            <img src="" alt="">
        </div>
        <div class="slider-footer">
            <p>对人类来说会不会太超前了</p>
            <ul class="slider-indicator">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>

            </ul>
            <div class="toggle"></div>
        </div>
    </div>



    <script>


        //2.初始化数据
        const goodList = [
            {
                img: '../image/1.jpg',
                id: '4001171',
                name: '商品1',
                price: '289.0'
            },
            {
                img: '../image/2.jpg',
                id: '4001172',
                name: '商品2',
                price: '189.0'
            },
            {
                img: '../image/3.jpg',
                id: '4001173',
                name: '商品3',
                price: '89.0'
            },
            {
                img: '../image/4.jpg',
                id: '4001174',
                name: '商品4',
                price: '589.0'
            },
            {
                img: '../image/5.jpg',
                id: '4001175',
                name: '商品5',
                price: '589.0'
            },
            {
                img: '../image/6.jpg',
                id: '4001176',
                name: '商品6',
                price: '29.0'
            },
            {
                img: '../image/7.jpg',
                id: '40011727',
                name: '商品7',
                price: '89.0'
            },
            {

                img: '../image/8.jpg',
                id: '4001178',
                name: '商品8',
                price: '189.0'
            }
        ]

        // 分析:
        // 1.从数组中获取对应的数据(图片路径)   
        // 2.将图片路径设置给对应的图片标签
        // 3.从数组中获取对应的数据(标题)
        // 4.将标题文字设置给对应的p标签
        // 5.将对应的li标签添加一个active类名

        // 代码实现
        // 1.定义变量保存当前从数据中的第几个值开始
        let index = 0
        // 2.获取标签对象
        let img = document.querySelector('img')
        let p = document.querySelector('p')
        // 3.开启定时器
        setInterval(function () {
            //4.在定时器中,我们要从数组中依次取值

            // 5.从数组中取值

            if (index >= goodList.length) { index = 0 }
            let obj = goodList[index]
            index++
            console.log(obj)
            // 6.从当前对象中获取图片路径和图片对应的标题
            let imgSrc = obj.img
            let p_title = obj.name
            // 7.将图片路径设置给img标签将标题设置给p标签

            img.src = imgSrc
            p.innerText = p_title

            // 9-1 先将页面中的active类名移除掉
            document.querySelector('.active').classList.remove('active')

            // 8.获取对应的li标签(当前是第几张图片,选中第几个li标签)
            let li = document.querySelector(`li:nth-child(${index})`)
            console.log(li)
            // 9.给当前的li标签添加active名
            li.classList.add('active')
        }, 3000)





    </script>
</body>

</html>

在这里插入图片描述

事件基本介绍

在网页中事件是用户的一个动作
用来实现用户和网页交互

      事件三要素
       a)事件源:用户的动作作用到那个标签身上,那个标签就是事件源
       b)事件类型:用户使用的是什么动作(点击事件、输入事件、悬停事件)
       c)处理程序:代表事件最后要实现的具体效果,就是一个匿名函数
    <div></div>
    <div></div>
    <script>
        //  绑定事件
        // 1.先获取事件源(DOM标签对象)
        // 2.给事件源绑定事件
        //事件源.addEventListener('事件类型',function(){});
        //备注:事件类型常用的一个点击事件:click
        // 
        // 代码演示
        // 点击div给div设置背景颜色
        let div = document.querySelector('div')
        div.addEventListener('click', function () {
            div.style.backgroundColor = 'pink'
        })


    </script>

在这里插入图片描述

其他方式绑定事件

给元素绑定事件推荐使用addEventListener方式
给元素绑定事件:DOML2写法:addEventListener
DOML0写法:事件源.on事件类型=function(){}
两种注册时间的区别:
a)addEventListener是个方法
b)on的方式本质上是一个属性
c)如果给元素注册多个相同的时间,则addEventListener都可以执行
d)如果给元素注册多个相同的事件,on的方式只能执行一个

    <input type="button" value="按钮">
    <script>

        let btn = document.querySelector('input')
        // DOML2写法:
        // btn.addEventListener('click', function () {
        //     btn.style.color = 'red'
        // })

        // DOML0写法:
        btn.onclick = function () {
            btn.style.color = 'red'
        }

        
    </script>

鼠标事件类型

鼠标触发

click 鼠标点击
mouseenter 鼠标进入
mouseleave 鼠标离开

焦点事件

focus 获得焦点

输入框获得鼠标光标

blur 失去焦点

键盘触发

键盘事件要么给整个页面注册,要么给输入框注册·······

Keydown 键盘按下触发
Keyup 键盘抬起触发

表单输入触发

input 用户输入事件

事件对象参数(只能设置一个)

作用:用来记录当前事件中的一些信息
注意:
a)任何一个事件都有事件对象参数,用就设置事件对象参数,不用就不加
b)键盘事件/鼠标事件===>常常会用到事件对象参数
c)键盘事件参数记录当前用户按下的是哪个按键
d)鼠标事件对象参数最重要的是记录了鼠标的坐标信息

    <input type="text">
    <script>

//键盘事件,鼠标事件类似
        let int = document.querySelector('input');
        int.addEventListener('keydown', function (e) {
            // e是event的缩写,叫事件对象参数
            console.log(e)
        })

    </script>

在这里插入图片描述

鼠标事件总结

事件对象参数.clientX 横坐标,参照页面左上角(参照页面可视区左上角)
事件对象参数.offsetX 横坐标,参照事件源左上角
事件对象参数.pageX 横坐标,参照页面左上角(看看页面中是否有滚动条,pageX包括滚动条滚动的距离)
事件对象参数.screenY 纵坐标,参照整个电脑屏幕左上角

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端实现扫同一个二维码,可以跳转到微信小程序和支付宝小程序?

前端如何实现扫同一个二维码&#xff0c;可以跳转到微信小程序和支付宝小程序&#xff1f; 不知道大家有没有遇到过这样的需求&#xff1a;扫描同一个二维码&#xff0c;要如何区分是微信还是支付宝扫码。然后进入微信和支付宝的小程序&#xff1f;&#xff1f; 就我目前所知道…

部署 LVS(nginx)+keepalived高可用负载均衡集群

目录 一、集群的概述 1、什么是集群 2、普通集群与负载均衡集群 2.1 普通集群&#xff08;Regular Cluster&#xff09; 2.2 负载均衡集群&#xff08;Load Balancing Cluster&#xff09; 2.3 高可用集群&#xff08;High Availability Cluster&#xff09; 2.4 区别 …

网站开发之旅:从概念到实现

在我成为一名专业的网站开发者的过程中&#xff0c;我有幸参与了多个激动人心的项目。其中&#xff0c;一个我印象尤为深刻的经历是&#xff0c;开发一个名为“文案推荐网”的主题网站&#xff08;www.zimeiti.love&#xff09;。这个项目不仅让我深入了解了网站开发的各个方面…

JVM优化

1. JVM内存 JVM内存&#xff1a; 1&#xff0c;虚拟机栈&#xff1a;每个线程有一个私有的栈&#xff0c;随着线程的创建而创建。每个方法会创建一个栈帧&#xff0c;栈帧中存放了局部变量表&#xff08;基本数据类型和对象引用&#xff09;、操作数栈、方法出口等 栈的大小可…

构建cef基本框架及构建过程中的参数说明

文章目录 准备源码版本编译版本结构编译过程写了好多CEF的内容了,发现一个最初的CEF helloworld的过程都没有写,也就是如何搭建这个CEF框架。今天把这个过程记录一下。 准备源码版本 在度娘上搜cef源码,一般得到的是https://bitbucket.org/chromiumembedded/cef/这个网址,…

linux下改变主机名,永久生效的方法

hostnamectl set-hostname test 例子 #支持大写必须就要这样写 hostnamectl set-hostname 名称 --static

Docker安装主从数据库

我自己的主数据库名字 user_muster 密码是123456 从数据库 就是slave2 名字是root 密码是123456 首先开启docker后直接执行命令 docker run -d \ -p 3307:3306 \ -v /xk857/mysql/master/conf:/etc/mysql/conf.d \ -v /xk857/mysql/master/data:/var/lib/mysql \ -e MYSQL_…

长非编码RNA(lncRNA)LINC00339编码的肽段促进滋养层细胞与子宫内膜细胞粘附的研究 AbMole

胚胎植入是一个复杂的过程&#xff0c;受多种因素影响&#xff0c;尤其是子宫内膜&#xff08;endometrium&#xff09;与胚泡&#xff08;blastocyst&#xff09;之间的相互作用。子宫内膜接受性&#xff08;Endometrial Receptivity, ER&#xff09;是指子宫内膜在适当的功能…

springboot+xjar加密打包部署教程

需求背景 为了跟上时代的步伐&#xff0c;为了更好的生存。开个玩笑&#xff0c;就是心血来潮&#xff0c;使用xjar加密部署jar包&#xff0c;于是就测试一下。 xjar教程 1-maven配置文件修改 首先找到自己ideal配置的maven文件夹&#xff0c;然后找到apache-maven-3.9.3\co…

基于Pytorch搭建分布式训练环境

Pytorch系列 文章目录 Pytorch系列前言一、DDP是什么二、DPP原理terms、nodes 和 ranks等相关术语解读DDP 的局限性为什么要选择 DDP 而不是 DP代码演示1. 在一个单 GPU 的 Node 上进行训练&#xff08;baseline&#xff09;2. 在一个多 GPU 的 Node 上进行训练临门一脚&#x…

js【详解】event loop(事件循环/事件轮询)

event loop 是异步回调的实现原理 js 代码的执行过程 从前到后&#xff0c;一行一行执行如果某一行执行报错&#xff0c;则停止下面代码的执行先把同步代码执行完&#xff0c;再执行异步 event loop 图解 以下方代码为例&#xff1a; 第1步 将第 1 行代码放入调用栈 将要执行第…

【探索Linux】—— 强大的命令行工具 P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )

阅读导航 引言一、socket 常见API表二、函数详细介绍01. socket()02. bind()03. listen()04. accept()05. connect()06. send()07. recv()08. close()09. select()10. getaddrinfo()11. sendto()12. recvfrom()13. setsockopt()14. getsockopt()15. shutdown()16. inet_pton()1…

Rust 编写新一代 Web 框架 Teo,同时支持 Node 和 Python,速度惊人!

大家好&#xff0c;我是渔夫。 今天分享主题&#xff0c;随着 Web 技术的迅速发展&#xff0c;开发变得愈发复杂&#xff0c;需要投入更多的时间和精力&#xff0c;今天介绍这款用 Rust 编写的新一代 Web 框架。 Web 项目开发越来越复杂&#xff0c;也让开发者带来很多挑战&a…

中国电子学会2021年6月份青少年软件编程Sc ratch图形化等级考试试卷四级真题

【 单选题 】 1.执行下列程序&#xff0c;输出的结果为&#xff1f; A&#xff1a;12 B&#xff1a;24 C&#xff1a;8 D&#xff1a;30 2.执行下列程序&#xff0c;角色说出的内容是&#xff1f; A&#xff1a;2 B&#xff1a;3 C&#xff1a;4 D&#xff1a;5 3.执行…

21-Java观察者模式 ( Observer Pattern )

Java备忘录模式 摘要实现范例 观察者模式 ( Observer Pattern ) 常用于对象间存在一对多关系时&#xff0c;比如&#xff0c;当一个对象被修改时&#xff0c;需要自动通知它的依赖对象 观察者模式属于行为型模式 摘要 1. 意图 定义对象间的一种一对多的依赖关系&#xff…

postman的替换者postcat

手册简介 Postcat 是国产的开源 api 管理工具&#xff0c;定位小团队及个人&#xff0c;有 API 相关的核心功能&#xff0c;文档、测试、管理、mock 甚至 api 分享等等功能。 目前还在持续维护中&#xff0c;欢迎大家关注并Star 支持一下~ https://github.com/Postcatlab/post…

《C缺陷和陷阱》-笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、理解函数声明 1.(*(void(*)( ))0)( ); 2.signal 函数接受两个参数&#xff1a; 3.使用typedef 简化函数声明&#xff1a; 二、运算符的优先级…

【HTML】HTML基础8.1(表单标签)

目录 效果 基础知识 标签 ① ② 代码 效果 基础知识 表单的组成元素 表单控件用户所填写的信息提示信息提示用户需要填的信息表单域包含表单元素的区域 标签 ① <form action"" method""></form> <form>标签确定了一个表单域&…

Centos安装Miniconda

Centos安装Miniconda 一、前言二、安装1、下载Miniconda2、执行安装脚本3、加载环境变量使之生效&#xff1a;4、配置conda国内镜像&#xff1a; 三、conda常用命令1、创建环境2、查看所有环境3、删除一个环境4、激活指定环境5、退出当前环境 一、前言 需要在Centos中使用pytho…

吴恩达深度学习笔记:深度学习引言1.1-1.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第一周&#xff1a;深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络&#xff1f;(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …