JavaScript web API part2

news2024/9/20 0:49:33

web API

全选反选案例

需求

  1. 勾选大复选框,勾选全部小复选框
  2. 取消勾选大复选框,则取消勾选全部小复选框
  3. 若有小复选框没有被勾选,则大复选框不被勾选
  4. 若所有小复选框都被勾选,则大复选框被勾选
<!DOCTYPE html>

<html>

<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    table {
      border-collapse: collapse;
      border-spacing: 0;
      border: 1px solid #c0c0c0;
      width: 500px;
      margin: 100px auto;
      text-align: center;
    }

    th {
      background-color: #09c;
      font: bold 16px "微软雅黑";
      color: #fff;
      height: 24px;
    }

    td {
      border: 1px solid #d0d0d0;
      color: #404060;
      padding: 10px;
    }

    .allCheck {
      width: 80px;
    }
  </style>
</head>

<body>
  <table>
    <tr>
      <th class="allCheck">
        <input type="checkbox" name="" id="checkAll"> <span class="all">全选</span>
      </th>
      <th>商品</th>
      <th>商家</th>
      <th>价格</th>
    </tr>
    <tr>
      <td>
        <input type="checkbox" name="check" class="ck">
      </td>
      <td>小米手机</td>
      <td>小米</td>
      <td>¥1999</td>
    </tr>
    <tr>
      <td>
        <input type="checkbox" name="check" class="ck">
      </td>
      <td>小米净水器</td>
      <td>小米</td>
      <td>¥4999</td>
    </tr>
    <tr>
      <td>
        <input type="checkbox" name="check" class="ck">
      </td>
      <td>小米电视</td>
      <td>小米</td>
      <td>¥5999</td>
    </tr>
  </table>
  <script>
    //1.获得事件源及响应对象
    //1.1获得大复选框
    const checkAll = document.querySelector('#checkAll')
    //1.2获得小复选框
    const ck = document.querySelectorAll('.ck')

    //2.在大复选框上绑定事件
    checkAll.addEventListener('click', function () {
      if (checkAll.checked === true) {
        for (let i = 0; i < ck.length; i++) {
          ck[i].checked = true
        }
      } else {
        for (let i = 0; i < ck.length; i++) {
          ck[i].checked = false
        }
      }
    })
    //3.全选后,若小复选框中有一个没有勾选,大复选框的勾选状态需要取消
    //3.1用计时器进行判断是一种方法
    // setInterval(function () {
    //   let a = 0
    //   for (let i = 0; i < ck.length; i++) {
    //     if (ck[i].checked === false) {
    //       checkAll.checked = false
    //     }
    //     if (ck[i].checked === true) {
    //       a++
    //     }
    //   }
    //   if (a === ck.length) {
    //     checkAll.checked = true
    //   }
    // }, 500)

    //3.2为每个小复选框添加点击事件,并判断有checked的个数是否等于总的小复选框的个数
    for (let i = 0; i < ck.length; i++) {
      ck[i].addEventListener('click', function () {
        if (document.querySelectorAll('.ck:checked').length === ck.length) {
          checkAll.checked = true
        }
        else {
          checkAll.checked = false
        }
      })
    }
  </script>
</body>

</html>

在这里插入图片描述

在这里插入图片描述


事件流

事件完整执行过程中的流动路径

父元素==>子元素 -----事件捕获
子元素==>父元素 ------事件冒泡

实际工作都是使用事件冒泡为主

事件捕获

从DOM根元素开始执行对应事件(需要写出对应的回调寒素才可以看到捕获机制的效果)

DOM.addEventListener(事件类型,函数,是否使用捕获)

是 — 捕获机制

否 — 冒泡机制

事件冒泡

当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中触发

【有时怕点击父元素中的子元素但父元素没有反应,则可以利用该机制】

阻止冒泡

事件对象.stopPropagation() (对捕获同样有效)

阻止元素默认行为

如表单提交,链接跳转 — 【可用于表单信息有误,不规范以及链接跳转需同意相关协议】

解绑事件

L0事件对象.onclick = null
L2事件对象.removeEventListener(‘事件类型’,函数)

匿名函数无法被解绑

[!IMPORTANT]

鼠标经过事件区别

  • 有冒泡:mouseover mouseout
  • 无冒泡:mouseenter mouseleave

事件委托

利用事件冒泡特征解决开发需求 ==> 将事件委托给父元素

作用:

减少子元素注册事件的次数,提高程序性能

e.target.tagName 实际触发事件的对象的标签名 【为大写】

e.target — 实际的触发事件的对象

案例

事件委托版tab栏切换

<script>
    //1.获取li的父元素ul
    const ul = document.querySelector('.tab-nav ul')

    //2.绑定事件
    ul.addEventListener('mouseover', function (e) {

      if (e.target.tagName === 'A') {
        //排他
        document.querySelector('.tab-nav ul .active').classList.remove('active')
        //添加
        e.target.classList.add('active')

        //下面的大盒子模块
        const i = +e.target.dataset.id
        //排他
        document.querySelector('.tab-content .active').classList.remove('active')
        //添加
        document.querySelector(`.tab-content div:nth-child(${i + 1})`).classList.add('active')
      }
    })
  </script>

其他事件

页面加载事件

— 有时js想写在body的上边 —

load DOMContentLoaded

区别

load可用在任何对象加载完毕时调用
DOMContentLoaded只可用在document对象,表示html元素加载完毕后执行
页面滚动事件

scroll —给window或document

应用场景:固定导航条,返回顶部

元素的两个属性

scrollTop scrollLeft ---- 可读写

案例

小兔显示导航和回到顶部

<script>
    //获取响应对象
    const dt = document.querySelector('.xtx-elevator')
    const backTop = document.querySelector('.xtx-elevator #backTop')
    //1.当页面滚动大于300px,显示侧边导航
    window.addEventListener('scroll', function () {
      const n = document.documentElement.scrollTop
      // if (n >= 300) {
      //   dt.style.opacity = 1
      // } else {
      //   dt.style.opacity = 0
      // }
      dt.style.opacity = n >= 300 ? 1 : 0
    })
    //点击返回页面顶部
    backTop.addEventListener('click', function () {
      document.documentElement.scrollTop = 0
    })
  </script>

在这里插入图片描述

页面尺寸事件

resize —窗口尺寸改变

clientWidth clientHeight —元素的宽高(不含border,margin,滚动条)

 window.addEventListener('resize', function () {
      let w = document.documentElement.clientWidth
      console.log(w);

    })

元素尺寸和位置

场景:页面滚动到某个元素的位置,触发函数调用

offsetWidth offsetHeight —包含border(数值)

如果盒子隐藏,获取结果为0

offsetLeft offsetTop --元素的位置(只读)【距离定位父级】

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  .father {
    overflow: hidden;
    width: 500px;
    height: 500px;
    background-color: skyblue;
    /* 当开启相对定位后,div.father为定位父元素,以此为测量基准 */
    /* position: relative; */
  }

  .son {
    width: 200px;
    height: 200px;
    margin-left: 100px;
    margin-top: 100px;
    background-color: blue;
  }
</style>

<body>
  <div class="father">
    <div class="son"></div>
  </div>
  <script>
    //1.获取事件源
    const son = document.querySelector('.son')

    console.log(son.offsetLeft);

  </script>
</body>

</html>

案例

仿京东固定导航条案例

  1. 滚动事件
  2. 到一定位置,显示顶部导航条
<!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>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .content {
      overflow: hidden;
      width: 1000px;
      height: 3000px;
      background-color: pink;
      margin: 0 auto;
    }

    .backtop {
      display: none;
      width: 50px;
      left: 50%;
      margin: 0 0 0 505px;
      position: fixed;
      bottom: 60px;
      z-index: 100;
    }

    .backtop a {
      height: 50px;
      width: 50px;
      background: url(./images/bg2.png) 0 -600px no-repeat;
      opacity: 0.35;
      overflow: hidden;
      display: block;
      text-indent: -999em;
      cursor: pointer;
    }

    .header {
      position: fixed;
      top: -80px;
      left: 0;
      width: 100%;
      height: 80px;
      background-color: purple;
      text-align: center;
      color: #fff;
      line-height: 80px;
      font-size: 30px;
      transition: all .3s;
    }

    .sk {
      width: 300px;
      height: 300px;
      background-color: skyblue;
      margin-top: 500px;
    }
  </style>
</head>

<body>
  <div class="header">我是顶部导航栏</div>
  <div class="content">
    <div class="sk">秒杀模块</div>
  </div>
  <div class="backtop">
    <img src="./images/close2.png" alt="">
    <a href="javascript:;"></a>
  </div>
  <script>
    //获取响应对象元素
    const header = document.querySelector('.header')
    const sk = document.querySelector('.sk')
    //1.为事件源绑定滚动事件
    window.addEventListener('scroll', function () {
      //1.获取滚动距离参数
      const n = document.documentElement.scrollTop
      if (n >= sk.offsetTop) {
        header.style.top = 0
      } else {
        header.style.top = '-80px'
      }
    })
  </script>
</body>

</html>

实现哔哩哔哩点击小滑块移动效果

<script>
    // 1. 事件委托的方法 获取父元素 tabs-list
    const list = document.querySelector('.tabs-list')
    const line = document.querySelector('.line')
    // 2. 注册点击事件
    list.addEventListener('click', function (e) {
      // 只有点击了A 才有触发效果
      if (e.target.tagName === 'A') {
        // console.log(11)
        // 当前元素是谁 ?  e.target
        // 得到当前点击元素的位置
        // console.log(e.target.offsetLeft)
        // line.style.transform = 'translateX(100px)'
        // 把我们点击的a链接盒子的位置  然后移动
        line.style.transform = `translateX(${e.target.offsetLeft}px)`
      }
    })

  </script>

补充:

element.getBounding.ClientRect() ===> 返回元素大小及其相对视口的位置

总结尺寸大小

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scratch中秋节贺卡——福满中秋

小虎鲸Scratch资源站-免费少儿编程Scratch作品源码,素材,教程分享网站! 中秋佳节即将到来&#xff0c;小虎鲸Scratch资源站为大家特别准备了一款精美的《Scratch中秋节贺卡——福满中秋》作品&#xff0c;带您轻松制作属于自己的节日贺卡&#xff0c;为亲朋好友送上最真挚的节日…

OpenBayes 教程上新 | FLUX ComfyUI 现已上线 ,让 SD 和 Midjourney 颤抖的文生图黑马!

横空出世的黑马 FLUX &#xff0c;以其强大的图像生成能力&#xff0c;让 Stable Diffusion 和 Midjourney 这 2 个「昔日顶流」倍感压力。 FLUX 与 Stable Diffusion 渊源颇深&#xff0c;其研发公司 Black Forest Labs 的创始人 Robin Rombach 是 Stable Diffusion 的共同开…

影刀RPA实战:自动化批量生成条形码完整指南

今天我们聊聊使用影刀来实现批量生成条形码&#xff0c;条形码在零售行业运用非常广泛&#xff0c;主要作用表现在产品识别&#xff0c;库存管理&#xff0c;销售管理&#xff0c;防伪保护等&#xff0c;这些作用使其成为现代商业和工业环境中不可或缺的工具&#xff0c;它极大…

HarmonyOS Next鸿蒙NDK使用示例

创建一个Native C项目 跟普通项目相比&#xff0c;主要区别是多了一个cpp文件夹、oh-package.json5中的dependencies引入还有build-profile.json5中的externalNativeOptions配置&#xff0c;abiFilters是支持的CPU架构&#xff0c;目前移动端项目只支持arm64-v8a、x86_64两种。…

微信支付开发--订阅号与服务号的区别

微信支付的开发&#xff0c;首先要搞明白订阅号与服务号的区别&#xff0c;其次就是要明白微信支付有很多通道&#xff0c;例如&#xff1a;JSAPI、APP、H5、Natice、小程序支付等。 微信支付系统的时序图 1、运营主体的不同 a、订阅号&#xff1a; 个人、媒体、企业、政府或其…

sheng的学习笔记-AI-序贯覆盖(sequential covering)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 规则学习&#xff1a;sheng的学习笔记-AI-规则学习&#xff08;rule learning&#xff09;-CSDN博客 剪枝&#xff1a;https://blog.csdn.net/coldstarry/article/details/137441167 基础知识 什么是序贯覆盖 规则学习…

论文翻译:arxiv-2022 Ignore Previous Prompt: Attack Techniques For Language Models

Ignore Previous Prompt: Attack Techniques For Language Models https://arxiv.org/pdf/2211.09527 忽略之前的提示&#xff1a;针对语言模型的攻击技术 文章目录 忽略之前的提示&#xff1a;针对语言模型的攻击技术摘要1 引言 摘要 基于Transformer的大型语言模型&#xf…

G1: Yunli‘s Subarray Queries (easy version)(1900)(定长区间众数)

思路&#xff1a;因为是定长区间&#xff0c;因此我们可以利用滑动窗口维护定长区间的众数的数量 AC代码&#xff1a; #include<bits/stdc.h>using namespace std;typedef long long ll; const int MOD 998244353; const int N 2e5 10;ll a[N]; ll b[N];//前i个数的…

com.alibaba.druid.pool.DruidDataSource error

Druid报错 Sep 11, 2024 11:16:03 AM com.alibaba.druid.pool.DruidDataSource error SEVERE: init datasource error, url: "jdbc:mysql://x.x.x.x:xxxx/test01?useSSLfalse&serverTimezoneUTC" java.sql.SQLException: connect error, url "jdbc:mysql:…

JAVA:对称加密技术的详细指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 对称加密是一种加密算法&#xff0c;其中加密和解密使用相同的密钥。其主要特点是速度快、效率高&#xff0c;适用于大数据量的加密需求。对称加密算法通常用于保护数据的机密性和完…

Day17_0.1基础学习MATLAB学习小技巧总结(17)——字符向量元胞数组

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍&#xff0c;为了在这个过程中加深印象&#xff0c;也为了能够有所足迹&#xff0c;我会把自己的学习总结发在专栏中&#xff0c;以便学习交流。 素材来源“数学建模清风” 特此说明&#xff1a;本博客的内容只在于总结在…

谷歌浏览器Chrome安装历史版本(亲测可用)

前言&#xff1a; 谷歌浏览器Chrome安装历史版本&#xff08;亲测可用&#xff09; 官网链接&#xff1a; https://downzen.com/en/windows/google-chrome/versions/?page4https://downzen.com/en/windows/google-chrome/versions/?page4 使用教程&#xff1a; 1、打开官网…

C++ 二叉树进阶

1.二叉搜索树简介 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树 &#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&#xff0c;则左子树上 所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上 所有节点的值都大于根节点的值 它…

人工智能对教育4.0的影响

随着技术变革的加速&#xff0c;迫切需要支持教育系统管理新的机遇和风险。如果管理得当&#xff0c;技术为帮助教育系统实现教育4.0提供了一个独特的机会。教育4.0是一种专注于为学习者提供适合未来的能力、技能、态度和价值观的教学方法。“教育4.0”是由全球教育专家、从业者…

艾体宝干货丨OIDA之二:掌握数据包分析-学会识别

在 OIDA 方法&#xff08;观察、识别、剖析、分析&#xff09;中&#xff0c;识别阶段对于在捕获的网络流量中精确定位相关数据至关重要。本文重点介绍如何在这一关键步骤中有效使用 Wireshark 和 Profitap 的 IOTA。 OIDA方法系列文章主要包含四个部分&#xff0c;分别是观察…

鸿蒙OS 应用基础知识

APP HarmonyOS 的应用软件包以 APP Pack&#xff08;Application Package&#xff09;形式发布&#xff0c;它是由一个或多个 HAP&#xff08;HarmonyOS Ability Package&#xff09;以及描述每个 HAP 属性的 pack.info 组成。HAP 是 [Ability]的部署包&#xff0c;HarmonyOS …

虚拟机安装VMware-tools详细教程

这里以VM16.12版本为例子&#xff0c;所有windows系统在所有虚拟机版本上都是一样的操作&#xff0c;参考即可 第一步打开虚拟机&#xff0c;这里需要注意的是虚拟机设备要有CD/DVD驱动器&#xff0c;这也是很多人说vmtool安装按钮是灰色的原因 第二步:打开虚拟机&#xff0c;…

linux入门到实操-1 Linux概述、诞生过程、发行版本,如何安装?

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff0c;供大家学习交流下载&#xff1a;夸克网盘分享 本文内容为完整笔记的入门篇 概述部分历史内容…

git push失败原因上传的文件超过了Gitee的上限100M

! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 这个错误信息表明你在尝试将更改推送到Gitee的socket_service仓库时遇到了问题。具体来说&#xff0c;问题出在你尝试推送的文件大小超过了Gitee平台设定的限制。Git…

Science Robotics 在小动物模型中实现渐进和可逆主动脉收缩的软机器人平台

前言速览&#xff1a;目前对左心室压力过载引起心脏重构过程的理解主要来源于主动脉束带的动物模型。然而&#xff0c;这些研究未能同时控制疾病的进展和逆转&#xff0c;阻碍了其临床意义。为此&#xff0c;来自哈佛大学、麻省理工学院等的研究人员介绍了一种基于植入式可扩张…