【JS】APIs:事件流、事件委托、其他事件、页面尺寸、日期对象与节点操作

1 事件流

捕获阶段:从父到子

冒泡阶段:从子到父

1.1 事件捕获

<body>
<div class="fa">
  <div class="son"></div>
</div>
<script>
  const fa=document.querySelector('.fa');
  const son=document.querySelector('.son');
  // 事件捕获,从父到子;冒泡阶段:从子到父
  // 事件冒泡:默认,当一个元素触发事件,会依次调用父级元素的同级事件,比如'click'
document.addEventListener('click',function(){
alert('我是yeye')
},true)
fa.addEventListener('click',function(){
alert('我是father')
},true)
son.addEventListener('click',function(){
alert('我是son')
},true)
</script>
<!-- 结果:yeye->father->son -->
</body>

1.2 事件冒泡

<body>
<div class="fa">
  <div class="son"></div>
</div>
<script>
  const fa=document.querySelector('.fa');
  const son=document.querySelector('.son');
  // 事件冒泡:默认,当一个元素触发事件,会依次调用父级元素的同级事件,比如'click'
document.addEventListener('click',function(){
alert('我是yeye')
})
fa.addEventListener('click',function(){
alert('我是father')
})
son.addEventListener('click',function(){
alert('我是son')
})
</script>
//结果:son->father->yeye

1.3 阻止冒泡

son.addEventListener('click',function(e){
alert('我是son')
e.stopPropagation()
})
<!-- 结果:只有son的alert -->

1.4 阻止捕获

// 在yeye身上加,而不是在son的身上加
document.addEventListener('click',function(e){
alert('我是yeye')
e.stopPropagation()
},true)

1.5 解绑事件

<body>
<button>提交</button>
<script>
const btn=document.querySelector('button')
btn.onclick=function(){
  
}
// L0事件移除解绑
btn.onclick=null
function fn(){}
// 绑定事件
btn.addEventListener('click',fn)
// 解绑事件
// L2事件移除解绑
btn.removeEventListener('click',fn)
</script>
</body>

1.5 鼠标经过事件

1.6 两种注册事件区别

2 事件委托

2.1 事件委托

<body>
<ul>
  <li>1111111111</li>
  <li>2222222222</li>
  <li>3333333333</li>
  <span>66666666</span>
</ul>
<script>
  // 子元素没有绑定事件,但是冒泡到了父元素身上,点li跳出警告11
const ul=document.querySelector('ul')
ul.addEventListener('click',function(e){
  alert('11')
  // console.dir()可以显示一个对象所有的属性和方法
  // e.target是我们点击的那个对象
  console.dir(e.target)
  // 只点击li才有效果
  if(e.target.tagName==='LI')
  {
    e.target.style.color='red'
  }
})
</script>

2.2 Tab栏切换(用事件委托)

<body>
  <div class="tab">
    <div class="tab-nav">
      <h3>每日特价</h3>
      <ul>
        <li><a class="active" href="javascript:; " data-id="0">精选</a></li>
        <li><a href="javascript:;" data-id="1">美食</a></li>
        <li><a href="javascript:;" data-id="2">百货</a></li>
        <li><a href="javascript:;" data-id="3">个护</a></li>
        <li><a href="javascript:;" data-id="4">预告</a></li>
      </ul>
    </div>
    <div class="tab-content">
      <div class="item active"><img src="./image/tab00.png" alt="" /></div>
      <div class="item"><img src="./image/tab01.png" alt="" /></div>
      <div class="item"><img src="./image/tab02.png" alt="" /></div>
      <div class="item"><img src="./image/tab03.png" alt="" /></div>
      <div class="item"><img src="./image/tab04.png" alt="" /></div>
    </div>
  </div>
<script>
  const ul=document.querySelector('ul')
  const items=document.querySelectorAll('.item')
  ul.addEventListener('click',function(e){
    document.querySelector('.tab-nav .active').classList.remove('active')
    e.target.classList.add('active')
    // 下面大盒子模块
  // i是字符串型,'1'+1为'11'
  const i=+e.target.dataset.id
  document.querySelector('.tab-content .active').classList.remove('active')
   //document.querySelector(`.tab-content .item:nth-child(${ i + 1 })`).classList.add('active')
  //  第二种方法
  items[i].classList.add('active')
})
</script>
</body>

3 其他事件

3.1 阻止元素默认跳转

<a href="#">跳转</a>
</ul>
<script>
const a=document.querySelector('a')
a.addEventListener('click',function(e){
  // 不让你跳转
  e.preventDefault()
})
</script>

3.2 页面加载事件

<head>
  <meta charset="UTF-8">
  <script>
    // 当页面所有资源执行完毕,再去执行回调函数
    window.addEventListener('load',function(){
      const a=document.querySelector('a')
    a.addEventListener('click',function(e){
      e.preventDefault()
    })
    })
    // 当图片资源执行完毕,再去执行回调函数
    img.addEventListener('load',function(){
      const a=document.querySelector('a')
    a.addEventListener('click',function(e){
      e.preventDefault()
    })
    })
     // 给document加,当HTML文档被完全加载和解析执行完成(不等样式、图片加载完),再去执行回调函数
     document.addEventListener('DOMContentLoaded',function(){
      const a=document.querySelector('a')
    a.addEventListener('click',function(e){
      e.preventDefault()
    })
    })
    </script>
</head>

3.3 元素滚动事件

<body>
<script>
  // 可以读取,可以赋值
  window.addEventListener('scroll',function () {
    // document.documentElement获取html元素
    console.log(document.documentElement.scrollTop)
  })
</script>
</body>

注意不能少这句:

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

3.4 页面尺寸

getBoundingClientRect():

<body>
  <div></div>
  <script>
    const div=document.querySelector('div')
    // 返回元素的大小和距离视口的位置
    console.log(div.getBoundingClientRect());
  </script>

3.4 案例

3.4.1 仿新浪固定头部

 .header {
//修改
            top: -80px;
} 
<script>
        const sk=document.querySelector('.sk')
        const header=document.querySelector('.header')
        window.addEventListener('scroll',function(){
            const n=document.documentElement.scrollTop
            // if(n>=sk.offsetTop)
            // {
            //     header.style.top=0
            // }else{
            //     header.style.top='-81px'
            // }
            header.style.top=n>=sk.offsetTop?0:'-80px'
        })


        
    </script>

3.4.2 blibli点击小滑块移动效果

  <script>
    const list = document.querySelector('.tabs-list')
    const line = document.querySelector('.line')
    list.addEventListener('click', function (e) {
      if (e.target.tagName === 'A') {
        //translatex设置对象沿X轴平移
        line.style.transform = `translateX(${e.target.offsetLeft}px)`
      }
    })
  </script>

 过渡效果:

.suspension .channel-menu .tabs .tabs-list .line {
 
  transition: all 0.5s;
}

3.4.3 电梯导航

APIs-day3-114-综合案例-电梯导航案例上集_哔哩哔哩_bilibili

见资源包源码

4 日期对象

日期对象作用:获取系统时间

4.1 实例化

  <script>
    const n1=new Date()
    console.log(n1);
    const n2=new Date('2030-6-6')
    console.log(n2);
  </script>

4.2 日期对象方法

效果:

<body>
  <div></div>
  <script>
    // 获得现在的时间年月日时分秒
   const div=document.querySelector('div')
   const n1=new Date()
  function fn(){
    const n=new Date()
    let h=n.getHours()
    let m=n.getMinutes()
    let s=n.getSeconds()
    h=h<10?'0'+h:h
    m=m<10?'0'+m:m
    s=s<10?'0'+s:s
    // getMonth()取值0-11
    return `现在的时间是${n.getFullYear()}年:${n.getMonth()+1}月${n.getDate()}日:${h}:${m}:${s}`
  }
  div.innerHTML=fn()
  setInterval(() => {
    div.innerHTML=fn()
  }, 1000);2024/3/10 11:20:44
  //得到日期对象
 div.innerHTML=n1.toLocaleString()//2024/3/10 11:20:44
 div.innerHTML=n1.toLocaleDateString()//2024/3/10
 div.innerHTML=n1.toLocaleTimeString()//11:21:48
  </script>
</body>

4.3 时间戳

从1970.1.1到某个时间的毫秒数

将来的时间戳-现在的时间戳=剩余时间毫秒数

<script>
    const date=new Date()
    // 获取时间戳第一种方法
    console.log(date.getTime())
        // 获取时间戳第二种方法
        // new Date()本来是字符型,+''变为数字型
        console.log(+new Date());
        // 获取时间戳第三种方法,不需要实例化
        console.log(Date.now());
        const arr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
        // getDay()返回的是0-6,如果今天是星期天,那就返回0
        console.log(arr[date.getDay()]);
  </script>

4.4 毕业倒计时案例

  <script>
   function getime(){
    const n=+new Date()
    const f=+new Date('2024-8-1 00:00:00')
    // 转换为秒数
    const t=(f-n)/1000
    let h=parseInt(t/60/60%24)
    h=h<10?'0'+h:h
    let m=parseInt(t/60%60)
    m=m<10?'0'+m:m
    let s=parseInt(t%60)
    s=s<10?'0'+s:s
    document.querySelector('#hour').innerHTML=h
    document.querySelector('#minutes').innerHTML=m
    document.querySelector('#sceond').innerHTML=s
   }
   getime()
   setInterval(getime,1000)
  </script>

5 节点操作

DOM树每一个内容都是一个节点

节点类型:元素节点、属性节点、文本节点

5.1 查找节点

5.1.1 查找父节点

<body>
  <div class="box">
    <div class="box1">1</div>
  </div>
  <div class="box">
    <div class="box1">2</div>
  </div>
  <div class="box">
    <div class="box1">3</div>
  </div>
  <script>
    const n=document.querySelectorAll('.box1')
    for(let i=0;i<n.length;i++)
    {
      n[i].addEventListener('click',function(){
        // display='none'消除盒子所占地方,从第一个开始关,下一个就顶上来
        // this.parentNode父节点查找
        this.parentNode.style.display='none'
      })
  }
  </script>
</body>

效果:点击一个,这一个就没有了

5.1.2 查找子节点

<body>
  <ul>
    <li><span>123</span></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
  <script>
    const ul=document.querySelector('ul')
    console.log(ul.children);//得到的是伪数组,仅获得所有元素节点
  </script>
</body>

5.1.3 查找兄弟节点

<body>
  <ul>
    <li><span>123</span></li>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
  <script>
    const li3=document.querySelector('ul li:nth-child(3)')
     console.log(li3.previousElementSibling);//上一个兄弟
     console.log(li3.nextElementSibling);//下一个兄弟
  </script>
</body>

 

 5.2 增加节点

5.2.1 增加节点

<body>
  <ul>
    <li><span>123</span></li>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
  <script>
    const ul=document.querySelector('ul')
    // 创建节点
    const lihou=document.createElement('li')
    lihou.innerHTML='我是创建的lihou'
    // 增加节点,插入到这个父元素的最后
     ul.appendChild(lihou)
    //  增加节点,插入到这个父元素指定位置之前
    const libef=document.createElement('li')
    libef.innerHTML='我是创建的libef'
    ul.insertBefore(libef,ul.children[0])
  </script>
</body>

 5.2.2克隆节点

<body>
  <ul>
    <li><span>123</span></li>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
  <script>
    const ul=document.querySelector('ul')
    // cloneNode(true)深克隆表示ul.children[0]里面有什么东西全拿过来;(),(false)浅克隆只克隆标签
    ul.appendChild(ul.children[0].cloneNode())
  </script>
</body>

 

5.3 删除节点

<body>
  <ul>
    <li><span>123</span></li>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
  <script>
    const ul=document.querySelector('ul')
    // 没有父子关系删除不成功
    ul.removeChild(ul.children[0])
  </script>
</body>

 

 6 swiper插件

Swiper中文网-轮播图幻灯片js插件,H5页面前端开发

7 学生信息表案例

APIs-day4-124-今日综合案例-学生信息表上集_哔哩哔哩_bilibili

代码见资源

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

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

相关文章

指针----三

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.冒泡排序2、二级指针3.指针数组4.指针数组模拟二级指针5.字符指针变量6.数组指针变量6.1 数组指针变量是什么&#xff1f;2.2 数组指针变量的初始化 前言 下…

bug总结(1)--变量取错

a c t i v i t y [ ′ t a g n a m e ′ ] 应为 activity[tag_name]应为 activity[′tagn​ame′]应为couponActivitList[0][‘name’] .隐藏的bug&#xff0c;在测试中竟然测不出来&#xff0c;而且上线了好久。为啥会出现这种低级错误呢&#xff1f;第一是写的时候不够仔细认…

【Python数据结构与判断2/7】数据和判断小结

目录 序言 print() 变量 赋值 四种数据类型 字符串 格式化输出 四则运算 取整与取模 比较运算 逻辑运算 判断 if语句 if-else语句 if-elif-else语句 Tips 空值、0、非0非空值 实战案例 输入密码 短信模板 总结 序言 今天将对前面学过的内容进行一个复习小结…

如何从碎屏的华为手机恢复数据?6 种热门方法

“只是想知道是否可以从屏幕损坏的华为恢复数据&#xff1f;我尝试将其插入我的笔记本电脑&#xff0c;但手机不允许我进入&#xff0c;因为它要求我更改手机中的设置等.我最好的选择是什么&#xff1f; 当发生事故&#xff0c;我们的华为手机屏幕损坏时&#xff0c;访问这些关…

【数据分享】2000-2022年全国1km分辨率的逐月PM10栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据、2013-2022年全国范围逐月SO2栅格数据和2013-2022年全国范围逐月CO栅格数据&#xff08;可以查看之前的文章获悉详情&#xff09;&#xff01; 本次我们…

云原生(一)、linux快速上手

Linux是一种开源的Unix-like操作系统内核。它是由Linus Torvalds于1991年首次发布&#xff0c;其后经过全球的自由软件社区的持续开发和改进。Linux内核是操作系统的核心部分&#xff0c;但通常与GNU项目合作&#xff0c;以形成完整的操作系统&#xff0c;被称为Linux发行版&am…

力扣hot100:152.乘积最大子数组(动态规划)

一个子数组问题&#xff0c;我们要使用线性dp&#xff0c;最好先考虑以i结尾&#xff0c;如果定义dp[i]为前i个数最大子数组乘积值 那么dp[i-1]就无法转移到dp[i]。因此我们先考虑dp[i]定义为以第i个数结尾的最大子数组乘积值。 53. 最大子数组和 最大子数组和是一个动态规划问…

b树(一篇文章带你 理解 )

目录 一、引言 二、B树的基本定义 三、B树的性质与操作 1 查找操作 2 插入操作 3 删除操作 四、B树的应用场景 1 数据库索引 2 文件系统 3 网络路由表 五、哪些数据库系统不使用B树进行索引 1 列式数据库 2 图形数据库 3 内存数据库 4 NoSQL数据库 5 分布式数据…

小巧设备,大能量:探索口袋中的远程控制神器

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

Cocos2dx-lua ScrollView[二]进阶篇

一.概述 本文缩写说明:sv = ScrollView, item代表ScrollView的一个子节点 如果对sv熟系程度还不够,请阅读基础篇: Cocos2dx-lua ScrollView[一]基础篇-CSDN博客 本文介绍sv的一种封装类库,来实现快速创建sv,有如下几个优点: 1.item的位置通过参数控制,提高开发效率…

virtualbox下centos安装增强工具没反应

virtualbox下centos安装增强工具没反应 标签:linux 可能原因猜想 virtualbox下最小化安装CentOS&#xff0c;由于最小化安装时&#xff0c;没有选择Development Tools组&#xff0c;导致没有kernel-devel&#xff0c;而后安装的kernel-devel与kernel版本不一致&#xff0c;导…

【linux进程信号】信号的产生

【Linux进程信号】信号的产生 目录 【Linux进程信号】信号的产生信号概念生活中的信号技术应用角度的信号注意信号概念用kill -l命令可以察看系统定义的信号列表信号处理常见方式概览 产生信号通过终端按键产生信号调用系统函数向进程发信号由软件条件产生信号由硬件异常产生信…

基于java(springboot+mybatis)汽车信息管理系统设计和实现以及文档

基于java(springbootmybatis)汽车信息管理系统设计和实现以及文档 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐…

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

Vue ECharts line3D点击空白处重置图表视角- 附完整示例

ECharts&#xff1a;一个基于 JavaScript 的开源可视化图表库。 目录 效果 一、介绍 1、官方文档&#xff1a;Apache ECharts 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 echarts 2、指定容器并设置容器宽高 3、数据处理&…

mysql 优化——磁盘空间优化

前言 有的时候&#xff0c;表的数据太多&#xff0c;为了提高查询以及存储&#xff0c;就把历史数据放到一个历史表里&#xff0c;在把历史数据删除&#xff0c;发现虽然历史数据删除&#xff0c;表的大小并没有发生改变。 Innodb 表有两部分&#xff0c;即&#xff1a;表结构…

【Emgu CV教程】9.1、形态学常用操作之腐蚀

文章目录 一、相关概念1.什么叫形态学2.形态学操作的目的3.形态学都包含哪些操作4.结构元素StructuringElement 二、腐蚀1.什么叫腐蚀2.腐蚀的作用3.腐蚀的函数 三、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫形态学 形态学&#xff0c;英文名称morphology&#…

【C++】了解一下STL

个人主页 &#xff1a; zxctscl 如有转载请先通知 STL 1. 什么是STL2. STL的版本3. STL的六大组件4. STL的重要性5. 如何学习STL6. STL的缺陷 1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件…

C语言:基于单链表实现的泊车管理系统

一、需求 &#xff08;1&#xff09;管理员方账号登录&#xff1b; &#xff08;2&#xff09;车位管理显示&#xff1a;车位状态&#xff1b; &#xff08;3&#xff09;收费管理&#xff1a;小轿车 5元/小时&#xff0c;面包车6元/小时&#xff0c;大货车或客车7元/小时&a…

vulhub中Weblogic 管理控制台未授权远程命令执行漏洞复现(CVE-2020-14882,CVE-2020-14883)

Weblogic是Oracle公司推出的J2EE应用服务器。在2020年10月的更新中&#xff0c;Oracle官方修复了两个长亭科技安全研究员voidfyoo 提交的安全漏洞&#xff0c;分别是CVE-2020-14882和CVE-2020-14883。 CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台&#x…
最新文章