Web APIs—事件监听、事件类型、事件对象、环境对象、回调函数、综合案例:随机点名案例,轮播图完整版,评论区回车发布,Tab栏切换

news2024/11/25 23:50:49

版本说明

当前版本号[20231205]。

版本修改说明
20231205初版

目录

文章目录

  • 版本说明
  • 目录
  • Web APIs - 第2天
    • 事件
      • 事件监听
        • 案例:通过点击按钮,弹出一个对话框
      • 事件类型
      • 事件处理程序
      • 综合案例:随机点名案例
    • 事件类型
      • 鼠标事件
      • 键盘事件
      • 焦点事件
        • 案例:搜索框
      • 文本框输入事件
        • 案例:评论字数统计
    • 综合案例:轮播图完整
    • 事件对象
        • 案例:评论回车发布
    • 环境对象
    • 回调函数
    • 综合案例:Tab栏切换

Web APIs - 第2天

学会通过为DOM注册事件来实现可交互的网页特效。

  • 能够判断函数运行的环境并确字 this 所指代的对象
  • 理解事件的作用,知道应用事件的 3 个步骤

学习会为 DOM 注册事件,实现简单可交互的网页特交。

事件

事件是编程语言中的术语,它是用来描述程序的行为或状态的,一旦行为或状态发生改变,便立即调用一个函数。

例如:用户使用【鼠标点击】网页中的一个按钮、用户使用【鼠标拖拽】网页中的一张图片

事件监听

结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。

就是让程序检测是否有事件产生,**一旦有事件触发,就立即调用一个函数做出响应,也称为绑定事件或者注册事件。**比如鼠标经过显示下拉菜单,比如点击可以播放轮播图等等

addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和【事件回调】。

<body>
  <h3>事件监听</h3>
  <p id="text">为 DOM 元素添加事件监听,等待事件发生,便立即执行一个函数。</p>
  <button id="btn">点击改变文字颜色</button>
  <script>
    // 1. 获取 button 对应的 DOM 对象
    const btn = document.querySelector('#btn')

    // 2. 添加事件监听
    btn.addEventListener('click', function () {
      console.log('等待事件被触发...')
      // 改变 p 标签的文字颜色
      let text = document.getElementById('text')
      text.style.color = 'red'
    })

    // 3. 只要用户点击了按钮,事件便触发了!!!
  </script>
</body>
</html>

完成事件监听分成3个步骤:

  1. 获取 DOM 元素
  2. 通过 addEventListener 方法为 DOM 节点添加事件监听
  3. 等待事件触发,如用户点击了某个按钮时便会触发 click 事件类型
  4. 事件触发后,相对应的回调函数会被执行

大白话描述:所谓的事件无非就是找个机会(事件触发)调用一个函数(回调函数)。

案例:通过点击按钮,弹出一个对话框

分析:

事件源: 按钮

事件类型: 点击鼠标 用 click 字符串

事件处理程序 弹出对话框

<body>
  <button>点这点这!~</button>

  <script>
    const btn = document.querySelector('button')
    btn.addEventListener('click', function(){
      alert('Hello!~')
    })
  </script>
</body>

网页输出结果:

image-20231201142642124

通过鼠标点击按钮后,会有弹出框的出现:

image-20231201142718799

事件类型

click 译成中文是【点击】的意思,它的含义是监听(等着)用户鼠标的单击操作,除了【单击】还有【双击】dblclick

<script>
  // 双击事件类型
  btn.addEventListener('dblclick', function () {
    console.log('等待事件被触发...');
    // 改变 p 标签的文字颜色
    const text = document.querySelector('.text')
    text.style.color = 'red'
  })

  // 只要用户双击击了按钮,事件便触发了!!!
</script>

结论:【事件类型】决定了事件被触发的方式,如 click 代表鼠标单击,dblclick 代表鼠标双击。

事件处理程序

addEventListener 的第2个参数是函数,这个函数会在事件被触发时立即被调用,在这个函数中可以编写任意逻辑的代码,如改变 DOM 文本颜色、文本内容等。

<script>
  // 双击事件类型
  btn.addEventListener('dblclick', function () {
    console.log('等待事件被触发...')
    
    const text = document.querySelector('.text')
    // 改变 p 标签的文字颜色
    text.style.color = 'red'
    // 改变 p 标签的文本内容
    text.style.fontSize = '20px'
  })
</script>

结论:【事件处理程序】决定了事件触发后应该执行的逻辑。

综合案例:随机点名案例

业务分析:

  1. 点击开始按钮随机抽取数组的一个数据,放到页面中
  2. 点击结束按钮删除数组当前抽取的一个数据
  3. 当抽取到最后一个数据的时候,两个按钮同时禁用(写点开始里面,只剩最后一个数据不用抽了)
  4. 核心:利用定时器快速展示,停止定时器结束展示

1、设计好开始页面。

image-20231201143634091

2、设计事件监听器,功能是每点一次"开始"按钮就输出 ‘1’.

<script>
        // 数据数组
        const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']
        const start = document.querySelector('.start')
        start.addEventListener('click', function(){
            console.log(1)
        })
    </script>

image-20231201144157364

3、设计事件监听器,每点击一次"开始"按钮,随机输出姓名。

 <script>
	    ……
        const qs = document.querySelector('.qs')
     	 ……
        start.addEventListener('click', function(){
            const random = parseInt(Math.random() * arr.length)
            qs.innerHTML = arr[random]
        })
    </script>

image-20231201144625193

4、设计一个事件监听器,当用户点击按钮时,会每隔35毫秒随机选择一个数组元素并将其显示在页面上。

start.addEventListener('click', function(){
            setInterval(function() {
                const random = parseInt(Math.random() * arr.length)
                qs.innerHTML = arr[random]
            } ,35)
        })

5、将局部变量变为全局变量,好让点击关闭按钮时,可以调用定时器,从而进行关闭。

<script>
        let timeId = 0
            timeId = setInterval(function() {
                const random = parseInt(Math.random() * arr.length)
                qs.innerHTML = arr[random]
            } ,35)
        })
        const end = document.querySelector('.end')
        end.addEventListener('click', function(){
            clearInterval(timeId)
        })
</script>

6、要想抽一个少一个,就得把随机变量变成全局变量,还得把const变为let。

<script>
        // 数据数组
        const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']
        const qs = document.querySelector('.qs')
        let timeId = 0
        let random = 0
        const start = document.querySelector('.start')
        start.addEventListener('click', function(){
            timeId = setInterval(function() {
                random = parseInt(Math.random() * arr.length)
                qs.innerHTML = arr[random]
            } ,35)
        })
        const end = document.querySelector('.end')
        end.addEventListener('click', function(){
            clearInterval(timeId)
            arr.splice(random , 1)
            console.log(arr)
        })
    </script>

image-20231201150102921

7、判断数组arr的长度是否为1,如果是,就是数组则将startend两个按钮的disabled属性设置为true,表示这两个按钮被禁用。

start.addEventListener('click', function(){
                 ……
                if(arr.length === 1)
            {
                start.disabled = end.disabled = true
            }
        })

image-20231201150738837

事件类型

将众多的事件类型分类可分为:鼠标事件、键盘事件、表单事件、焦点事件等,我们逐一展开学习。

image-20231201151407608

鼠标事件

鼠标事件是指跟鼠标操作相关的事件,如单击、双击、移动等。

  1. `mouseenter 监听鼠标是否移入 DOM 元素
<body>
  <h3>鼠标事件</h3>
  <p>监听与鼠标相关的操作</p>
  <hr>
  <div class="box"></div>
  <script>
    // 需要事件监听的 DOM 元素
    const box = document.querySelector('.box');

    // 监听鼠标是移入当前 DOM 元素
    box.addEventListener('mouseenter', function () {
      // 修改文本内容
      this.innerText = '鼠标移入了...';
      // 修改光标的风格
      this.style.cursor = 'move';
    })
  </script>
</body>
  1. `mouseleave 监听鼠标是否移出 DOM 元素
<body>
  <h3>鼠标事件</h3>
  <p>监听与鼠标相关的操作</p>
  <hr>
  <div class="box"></div>
  <script>
    // 需要事件监听的 DOM 元素
    const box = document.querySelector('.box');

    // 监听鼠标是移出当前 DOM 元素
    box.addEventListener('mouseleave', function () {
      // 修改文本内容
      this.innerText = '鼠标移出了...';
    })
  </script>
</body>

键盘事件

keydown 键盘按下触发
keyup 键盘抬起触发

焦点事件

focus 获得焦点

blur 失去焦点

1、创建一个文本输入框,并使用JavaScript为该输入框添加了一个焦点事件监听器。当用户将焦点放在输入框上时,控制台会输出"有焦点触发"。

<body>
  <input type="text">

  <script>
    const input = document.querySelector('input')
    input.addEventListener('focus', function(){
      console.log('有焦点触发')
    })
  </script>
</body>

image-20231205092102579

2、为HTML元素添加事件监听器。作用是在用户将焦点从输入框移开时,在控制台输出"失去焦点触发"。

input.addEventListener('blur', function(){
      console.log('失去焦点触发')
    })

image-20231205092252414

案例:搜索框

1、监听事件焦点。在网页中实现搜索框的自动聚焦功能。当用户点击页面上的搜索框时,搜索结果列表会显示出来。

<script>
        const search = document.querySelector('[type=search]')
        const list = document.querySelector('.result-list')
        search.addEventListener('focus', function(){
            list.style.display = 'block'
        })

    </script>

image-20231205093334567

2、处理搜索框失去焦点(blur)的事件。当用户离开搜索框时,它会将列表的显示样式设置为’none’,即隐藏列表。

search.addEventListener('blur', function(){
            list.style.display = 'none'
        })

image-20231205093428598

文本框输入事件

input

案例:评论字数统计

image-20231205094201519

分析如下:

image-20231205094407328

1、处理文本域获得焦点的事件。当用户在文本域中输入内容时,它会将右下角的显示记字数的框的透明度设置为1,使其可见。

<script>
    // 当我们文本域获得焦点,就让total显示出来
    const tx = document.querySelector('#tx')
    const total = document.querySelector('.wrapper .total')
    tx.addEventListener('focus', function(){
      total.style.opacity = 1
    })
  </script>

image-20231205100106327

2、当用户离开文本域时,它会将记字数的框的透明度设置为0,使其隐藏起来。

// 当我们文本域失去焦点,就让total隐藏出来
    tx.addEventListener('blur', function(){
      total.style.opacity = 0
    })

image-20231205100153882

3、用于检测用户在文本域中输入的内容。当用户在文本域中输入内容时,它会将文本域的值的长度输出到控制台,并将文本域的值的长度显示在名为"total"的元素中,同时限制文本域的最大长度为200字。

 // 检测用户输入
    tx.addEventListener('input', function(){
      // 用于测试输出长度是否一致
      console.log('1')
      total.innerHTML = `${tx.value.length}/200字`
    })

image-20231205102409211

综合案例:轮播图完整

需求:当点击左右的按钮,可以切换轮播图

image-20231203162412281

1、设置右按钮业务。

// 右按钮业务
    // 获取右侧按钮
    const next = document.querySelector('.next')
    // 注册点击事件
    next.addEventListener('click', function() {
      console.log(11)
    })

连续点击几次后:

image-20231203163227858

2、增加信号量 i , 得到对应的对象出来。

	……
    // 信号量,用于控制播放图片张数
    let i = 0
    // 注册点击事件
    next.addEventListener('click', function() {
      i++
      // 得到对应的对象出来
      console.log(data[i])
    })

image-20231203163552414

3、让原先的img中的src不断替换数据源中的url图片,从而形成切换图片的样式。

 // 获取元素
    const img = document.querySelector('.slider-wrapper img')
    // 右按钮业务
    // 获取右侧按钮
    const next = document.querySelector('.next')
    // 信号量,用于控制播放图片张数
    let i = 0
    // 注册点击事件
    next.addEventListener('click', function() {
      i++
      // 得到对应的对象出来
      // 
      img.src = data[i].url
    })

image-20231203164143909

4、获取文字。

// 获取元素
    const p = document.querySelector('.slider-footer p')
	……	
    next.addEventListener('click', function() {
      i++
      // 得到对应的对象出来
      // 文字类一定要加上 innerHTML 才能显示出来!
      p.innerHTML = data[i].title
    })

image-20231203164726687

5、切换背景。

// 获取元素
    const color = document.querySelector('.slider-footer')
   
    next.addEventListener('click', function() {
      i++
  	 ……
      // 背景颜色的命名要记得是小驼峰命名法!
      color.style.backgroundColor = data[i].color
    })

image-20231203165334674

6、设计小圆点样式。

      // 添加小圆点
      // 先移除原来的类名,再给当前 li 再添加 这个 类名
      document.querySelector('.slider-indicator .active').classList.remove('active')
      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')

image-20231203165851169

7、如果大于等于8,则复原成0,从头再开始遍历图片。

// 判断条件
      if(i >= data.length)
      {
        i = 0
      }

8、增加左按钮业务,功能也是左右切换图片。

// 左按钮业务
    // 获取左侧按钮
    const prev = document.querySelector('.prev')
    // 注册点击事件
    prev.addEventListener('click', function() {
      i--
      // 判断条件
      if(i < 0)
      {
        i = data.length - 1
      }
      // 得到对应的对象出来
      img.src = data[i].url
      // 文字类一定要加上 innerHTML 才能显示出来!
      p.innerHTML = data[i].title
      // 背景颜色的命名要记得是小驼峰命名法!
      color.style.backgroundColor = data[i].color
      // 添加小圆点
      // 先移除原来的类名,再给当前 li 再添加 这个 类名
      document.querySelector('.slider-indicator .active').classList.remove('active')
      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
    })

image-20231203171316295

9、学会调用该函数。

// 声明一个渲染的函数作为复用
    function common()
    {
      // 得到对应的对象出来
      img.src = data[i].url
      // 文字类一定要加上 innerHTML 才能显示出来!
      p.innerHTML = data[i].title
      // 背景颜色的命名要记得是小驼峰命名法!
      color.style.backgroundColor = data[i].color
      // 添加小圆点
      // 先移除原来的类名,再给当前 li 再添加 这个 类名
      document.querySelector('.slider-indicator .active').classList.remove('active')
      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
    }
    
      // 如需调用公共函数,示例如下:
      common()

10、使用了setInterval函数来定时执行一个匿名函数,该函数会模拟点击名为"next"的元素。

// 自动播放模块
    let nameId = setInterval(function(){
      // 利用js自动调用点击事件,一定要加小括号来调用函数
      next.click()
    }, 1000)

11、用于在鼠标经过名为"slider"的元素时停止计时器。

// 鼠标经过,停止计时器
    const slider = document.querySelector('.slider')
    slider.addEventListener('mouseenter', function(){
      clearInterval(nameId)
    })

12、用于在鼠标离开名为"slider"的元素时重新开启计时器。

 // 鼠标离开,打开计时器
    slider.addEventListener('mouseleave', function(){
      clearInterval(nameId)
      // 自动播放模块,不要把let加进来,那样就是局部变量了
        nameId = setInterval(function(){
        // 利用js自动调用点击事件,一定要加小括号来调用函数
        next.click()
      }, 1000)
    })

事件对象

任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。

事件对象是什么?

  • 也是个对象,这个对象里有事件触发时的相关信息
  • 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息

使用场景

  • 可以判断用户按下哪个键,比如按下回车键可以发布新闻
  • 可以判断鼠标点击了哪个元素,从而做相应的操作

语法:如何获取

  • 在事件绑定的回调函数的第一个参数就是事件对象
  • 一般命名为event、ev、e
<body>
  <h3>事件对象</h3>
  <p>任意事件类型被触发时与事件相关的信息会被以对象的形式记录下来,我们称这个对象为事件对象。</p>
  <hr>
  <div class="box"></div>
  <script>
    // 获取 .box 元素
    const box = document.querySelector('.box')

    // 添加事件监听
    box.addEventListener('click', function (e) {
      console.log('任意事件类型被触发后,相关信息会以对象形式被记录下来...');

      // 事件回调函数的第1个参数即所谓的事件对象
      console.log(e)
    })
  </script>
</body>

事件回调函数的【第1个参数】即所谓的事件对象,通常习惯性的将这个对数命名为 eventevev

接下来简单看一下事件对象中包含了哪些有用的信息:

  1. ev.type 当前事件的类型
  2. ev.clientX/Y 光标相对浏览器窗口的位置
  3. ev.offsetX/Y 光标相于当前 DOM 元素的位置

注:在事件回调函数内部通过 window.event 同样可以获取事件对象。

1、用于监听键盘按键释放事件。当用户在输入框中按下并释放一个键时,会触发这个事件。

input.addEventListener('keyup', function(e){
      console.log(e)
    })

image-20231205105145173

2、而我们刚刚输入的键,可通过 key 拿到。

image-20231205105242115

3、e.key 代表是我们输入的按键内容。

input.addEventListener('keyup', function(e){
      console.log(e.key)
    })

image-20231205105518324

4、在用户在网页上的输入框中按下回车键时,控制台会输出"回车!"。

<script>
    const input = document.querySelector('input')
    input.addEventListener('keyup', function(e){
      if(e.key === 'Enter'){
        console.log('回车!')
      }
    })
  </script>

image-20231205104821631

案例:评论回车发布

需求:按下回车键盘,可以发布信息

分析如下:

image-20231205105830684

参考输出:

image-20231205105903697

1、在用户在输入框(假设其ID为"tx")中按下回车键时,将具有类名"item"的元素(即回复框)显示出来。

const list = document.querySelector('.item')
    tx.addEventListener('keyup', function(e){
      if(e.key === 'Enter')
      {
        list.style.display = 'block'
      }
    })

image-20231205112154351

2、是在用户在输入框(假设其ID为"tx")中按下回车键时,将输入框的值显示在具有类名"info .text"的元素中,并将该元素设置为可见。

const list = document.querySelector('.item')
    const text = document.querySelector('.info .text')
    tx.addEventListener('keyup', function(e){
      if(e.key === 'Enter')
      {
        list.style.display = 'block'
        text.innerHTML = tx.value
      }
    })

image-20231205113003914

3、这段代码是一个事件处理函数,用于处理键盘按键事件。当用户按下回车键时,会执行以下操作:

  1. 首先,检查文本框(tx)的值是否为空或只包含空格。如果是空的或者只包含空格,则不执行任何操作
  2. 如果文本框的值不为空且不仅包含空格,则将文本框的值显示在列表元素(list)中,并将其设置为可见状态
  3. 最后,清空文本框的值,以便用户可以继续输入新的文本
if(e.key === 'Enter')
      {
        if(tx.value.trim() !== '')
        {
          // 如果用户输入的不为空就显示和打印
          list.style.display = 'block'
          text.innerHTML = tx.value
        }
        // 按下回车清空文本域
        tx.value = ''
      }

image-20231205114037921

环境对象

能够分析判断函数运行在不同环境中 this 所指代的对象。

环境对象指的是函数内部特殊的变量 this ,它代表着当前函数运行时所处的环境。

<script>
  // 声明函数
  function sayHi() {
    // this 是一个变量
    console.log(this);
  }

  // 声明一个对象
  let user = {
    name: '张三',
    sayHi: sayHi // 此处把 sayHi 函数,赋值给 sayHi 属性
  }
  
  let person = {
    name: '李四',
    sayHi: sayHi
  }

  // 直接调用
  sayHi() // window
  window.sayHi() // window

  // 做为对象方法调用
  user.sayHi()// user
	person.sayHi()// person
</script>

结论:

  1. this 本质上是一个变量,数据类型为对象
  2. 函数的调用方式不同 this 变量的值也不同
  3. 【谁调用 this 就是谁】是判断 this 值的粗略规则
  4. 函数直接调用时实际上 window.sayHi() 所以 this 的值为 window

回调函数

如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为回调函数。

目标:能够说出什么是回调函数

如果将函数A做为参数传递给函数B时,我们称函数A为回调函数

简单理解:当一个函数当做参数来传递给另外一个函数的时候,这个函数就是回调函数

   function bar() {
    console.log('函数也能当参数...');
  }
  foo(bar);

函数 bar 做参数传给了 foo 函数,bar 就是所谓的回调函数了!!!

我们回顾一下间歇函数 setInterval

<script>
	function fn() {
    console.log('我是回调函数...');
  }
  // 调用定时器
  setInterval(fn, 1000);
</script>

fn 函数做为参数传给了 setInterval ,这便是回调函数的实际应用了,结合刚刚学习的函数表达式上述代码还有另一种更常见写法。

<script>
  // 调用定时器,匿名函数做为参数
  setInterval(function () {
    console.log('我是回调函数...');
  }, 1000);
</script>

结论:

  1. 回调函数本质还是函数,只不过把它当成参数使用
  2. 使用匿名函数做为回调函数比较常见

综合案例:Tab栏切换

鼠标经过不同的选项卡,底部可以显示不同的内容

image-20231205193954796

分析如下:

image-20231205194016990

1、每次鼠标滑动经过一次,就增加一次输出“11”。

记得这里要使用: querySelectorAll ! 因为要把5个 a 全部拿过来!

<script>
    const as = document.querySelectorAll('.tab-nav a')
    for(let i = 0 ; i < as.length; i++)
    {
      as[i].addEventListener('mouseenter', function(){
        console.log("11")
      })
    }
  </script>

image-20231205195418388

2、首先先移除类active。可以看到,第一次移除时不会出现任何的问题,第二次因为没有 active 给他移除了,就直接报错了。

as[i].addEventListener('mouseenter', function(){
        // 排他思想
        // 移除类active
        document.querySelector('.tab-nav .active').classList.remove('active')
      })

image-20231205200019062

3、给当前的 a 添加上类 active 。就可以随意改样式啦。

 // 添加类active this 即代表当前的这个
        this.classList.add('active')

image-20231205200451930

4、修改图片。可以看到,第一次移除时不会出现任何的问题,第二次因为没有 active 给他移除了,就直接报错了。

	// 改图片
        // 移除类active
        document.querySelector('.tab-content .active').classList.remove('active')

image-20231205201026726

5、是为页面上对应索引的标签内容项添加一个名为 “active” 的类。具体来说,它使用 querySelector 方法选择具有特定 CSS 选择器的元素,然后使用 classList.add 方法将 “active” 类添加到该元素的类列表中。从而实现每一选项内的图片都可以进行更换。

 // 对应符号的那个 item 表示,添加 active 类
        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')

image-20231205201515283

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

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

相关文章

为啥你的文案点击量少?快来看看是不是犯了这些误区

信息爆炸的时代下用户注意力成为稀缺资源&#xff0c;一篇文章如果不能在最开始就抓住读者的心就宛如石沉大海&#xff0c;而许多企业在写软文时总会因为点击量太少而焦虑&#xff0c;今天媒介盒子就来和大家分析分析&#xff0c;为啥你的文章点击量少&#xff0c;帮助企业搞清…

vue项目中添加刷新的按钮

刷新功能 点击导航的刷新按钮&#xff0c;刷新下方主体内容&#xff0c;我这边的项目分为左-上-下结构&#xff0c;上边为tabbar组件&#xff0c;下边为main组件&#xff0c;点击刷新整个流程是刷新按钮&#xff0c;去访问它父组件tabbar的兄弟组件main&#xff0c;使main组件…

渗透测试学习day7

文章目录 靶机&#xff1a;VaccineTask1Task2Task3Task4Task5Task6 7-9解题过程Task7Submit user flagSubmit root flag 靶机&#xff1a;Vaccine Task1 问题&#xff1a;除了SSH和HTTP&#xff0c;这个盒子上还托管了什么服务&#xff1f; ftpnmap扫一下 Task2 问题&…

活动目录是什么?

企业在进行数字化转型时&#xff0c;也会面临日益增长的网络用户和复杂的身份管理需求。为了高效地管理用户身份、控制访问权限以及保护企业的数据安全&#xff0c;许多企业选择使用微软的Active Directory&#xff0c;即微软活动目录&#xff0c;来作为网络身份管理系统。 1、…

概率密度函数(PDF)正态分布

概率密度函数&#xff08;PDF&#xff09;是一个描述连续随机变量取特定值的相对可能性的函数。对于正态分布的情况&#xff0c;其PDF有一个特定的形式&#xff0c;这个形式中包括了一个常数乘以一个指数函数&#xff0c;它假设误差项服从均值为0的正态分布&#xff1a; p ( …

算法通关村第十三关-白银挑战数字与数学高频问题

大家好我是苏麟 , 今天带来数字与数学的高频问题 . 加一 描述 : 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个…

D9741 应用于电视摄像机,笔记本电脑等产品中,3.6V ~ 35V 100mA 三极管驱动

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点&#xff1a;● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电…

时间选择器

<el-form-item label"时间范围"><!-- <el-date-picker size"small"v-model"createTime"type"daterange"range-separator"至"start-placeholder"请输入起始创建时间"end-placeholder"请输入终止创…

【优选算法系列】【专题一双指针】第四节.15. 三数之和和18. 四数之和

文章目录 前言一、三数之和 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、四数之和 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

美股电动汽车股票分析:蔚来和Rivian这两只都遭受了重创的股票,哪个更值得投资?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 Rivian(RIVN)和蔚来(NIO)都是目前美股市场上最受关注的电动汽车股票。虽然蔚来在全球最大的电动汽车市场中国扮演着重要角色&#xff0c;但Rivian也击败了很多传统汽车制造商&#xff0c;并成为了第一家在美国推出全电动皮…

Python爬虫完整代码模版——获取网页数据的艺术

Python爬虫完整代码模版——获取网页数据的艺术 在当今数字化世界中&#xff0c;数据是价值的源泉。如何从海量数据中提取所需信息&#xff0c;是每个数据科学家和开发者必须面对的问题。Python爬虫作为一种自动化工具&#xff0c;专门用于从网站上抓取数据。本文将提供一个Py…

Servlet作业1

1.【单选题】 (10分) &#xff08;B &#xff09;是一个用 Java 编写的程序&#xff0c;是一种实现了Servlet接口的类&#xff0c;它是由web容器负责创建并调用&#xff0c;在服务器容器上运行&#xff0c;用于接收和响应用户的请求。 A.Filter B.Servlet C.Request D.Res…

C语言之联合和枚举

C语言之联合和枚举 文章目录 C语言之联合和枚举1. 联合体1.1 联合体的声明1.2 联合体的特点1.3 结构体和联合体对比1.4 联合体大小的计算1.5 联合体小练习 2. 枚举2.1 枚举类型的声明2.2 枚举类型的优点2.3 枚举类型的使用 1. 联合体 1.1 联合体的声明 像结构体⼀样&#xff…

C/C++,组合算法——K人活动选择问题(Activity-Selection-Problem)的源程序

1 活动选择问题 Activity-Selection-Problem with k persons 给定两个大小为 N 的数组S[]和E[]表示商店的开始和结束时间&#xff0c;以及一个整数值 K 表示人数&#xff0c; 任务是找出如果他们基于以下条件最佳地访问每个商店&#xff0c;他们总共可以访问的商店的最大数量…

UEC++ 探索虚幻5笔记(捡金币案例) day12

吃金币案例 创建金币逻辑 之前的MyActor_One.cpp&#xff0c;直接添加几个资源拿着就用 //静态网格UPROPERTY(VisibleAnywhere, BlueprintReadOnly)class UStaticMeshComponent* StaticMesh;//球形碰撞体UPROPERTY(VisibleAnywhere, BlueprintReadWrite)class USphereCompone…

《Pandas1.x实例精解 》书籍分享

Pandas介绍 Pandas&#xff1a;Python数据分析的瑞士军刀 在数据科学、机器学习和人工智能日益繁荣的今天&#xff0c;有效、准确地处理和分析数据已经成为了成功的关键。Python&#xff0c;作为一种强大且易于学习的编程语言&#xff0c;已经在这一领域占据了重要的地位。而…

面试多线程八股文十问十答第三期

面试多线程八股文十问十答第三期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.介绍一下自旋锁 重量级锁竞争时&#xff0c;尝试获取锁的线程不会立即阻塞&…

Web自动化测试怎么做?Web网页测试全流程解析

1、功能测试 web网页测试中的功能测试&#xff0c;主要测试网页中的所有链接、数据库连接、用于在网页中提交或获取用户信息的表单、Cookie 测试等。 &#xff08;1&#xff09;查看所有链接&#xff1a; 测试从所有页面到被测特定域的传出链接。 测试所有内部链接。 测…

前后端分离vue+Nodejs社区志愿者招募管理系统

1、首页 1)滑动的社区照片册 使用轮播图&#xff0c;对社区的活动纪念与实时事件宣传。 每个图片附有文字链接&#xff0c;点击跳转对应社区要闻具体页。 2)社区公告栏 日常的社区公告以及系统说明在此区域中进行说明与展示。 2、志愿活动 1)志愿活动发布 想发布需要登录 2)志愿…

12.5_黑马数据结构与算法Java

目录 001 二分查找 算法描述 002 二分查找 算法实现 003 二分查找 问题1 循环条件 004 二分查找 问题2 中间索引 thinking&#xff1a;反码补码原码&#xff1f; thinking&#xff1a;二进制转十进制&#xff1f; thinking&#xff1a;无符号右移&#xff1f; 005 二分…