JavaScript Web API入门day2

news2024/11/16 18:08:29

目录

1.DOM事件基础

1.1 事件监听

1.2 事件监听案例

1.2.1 京东点击关闭顶部广告

1.2.2 随机点名案例

1.3 事件监听版本

2. 事件类型

2.1 事件类型案例

2.1.1 轮播图点击切换

2.1.2 评论字数统计

3.事件对象

3.1 获取事件对象

3.2 事件对象常用属性

3.3 事件对象案例

4.环境对象

5. 回调函数

6.综合案例


1.DOM事件基础

1.1 事件监听

目标:能够给 DOM元素添加事件监听
什么是事件?
事件是在编程时系统内发生的 动作 或者发生的事情 ,比如用户在网页上 单击 一个按钮
什么是事件监听?
就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 绑定事件或者注册事件 ,比如鼠标经过显示下拉菜单,比如点击可以播放轮播图等等。
语法:
事件监听三要素:
  • Ø 事件源: 那个dom元素被事件触发了,要获取dom元素对象
  • Ø 事件类型: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等
  • Ø 事件调用的函数: 要做什么事

举例说明:

1.2 事件监听案例

1.2.1 京东点击关闭顶部广告

需求:点击关闭之后,顶部关闭
分析:
①:点击的是关闭按钮
②:关闭的是父盒子
核心:利用样式的显示和隐藏完成, display:none 隐藏元素 display:block 显示元素
代码:
李伟兴 09:31:13
<!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>
        .box {
            position: relative;
            width: 1000px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
            text-align: center;
            font-size: 50px;
            line-height: 200px;
            font-weight: 700;
        }

        .box1 {
            position: absolute;
            right: 20px;
            top: 10px;
            width: 20px;
            height: 20px;
            background-color: skyblue;
            text-align: center;
            line-height: 20px;
            font-size: 16px;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <div class="box">
        我是广告
        <div class="box1">X</div>
    </div>
    <script>
        // 1. 获取事件源
        const box1 = document.querySelector('.box1')
        //  关闭的是大盒子
        const box = document.querySelector('.box')
        // 2. 事件侦听
        box1.addEventListener('click', function () {
            box.style.display = 'none'
        })
    </script>
</body>

</html>

1.2.2 随机点名案例

业务分析:
① 点击开始按钮随机抽取数组的一个数据,放到页面中
② 点击结束按钮删除数组当前抽取的一个数据
③ 当抽取到最后一个数据的时候,两个按钮同时禁用(写点开始里面,只剩最后一个数据不用抽了)
核心:利用定时器快速展示,停止定时器结束展示
代码:
<!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>
        * {
            margin: 0;
            padding: 0;
        }

        h2 {
            text-align: center;
        }

        .box {
            width: 600px;
            margin: 50px auto;
            display: flex;
            font-size: 25px;
            line-height: 40px;
        }

        .qs {

            width: 450px;
            height: 40px;
            color: red;

        }

        .btns {
            text-align: center;
        }

        .btns button {
            width: 120px;
            height: 35px;
            margin: 0 50px;
        }
    </style>
</head>

<body>
    <h2>随机点名</h2>
    <div class="box">
        <span>名字是:</span>
        <div class="qs">这里显示姓名</div>
    </div>
    <div class="btns">
        <button class="start">开始</button>
        <button class="end">结束</button>
    </div>

    <script>
        // 数组
        const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']
        // 定时器的全局变量
        let time = 0
        // 数组随机下标的全局变量
        let random = 0
        // 获取开始按钮事件
        const start = document.querySelector('.start')
        // 获取结束按钮事件
        const end = document.querySelector('.end')
        // 开始事件函数
        start.addEventListener('click', function () {
            //开启定时器
            time = setInterval(function () {
                // 开始事件处理
                const qs = document.querySelector('.qs')
                random = parseInt(Math.random() * arr.length)
                qs.innerHTML = arr[random]
            }, 50)

            if (arr.length === 1) {
                start.disabled = true
                end.disabled = true
            }
        })

        // 结束事件函数
        end.addEventListener('click', function () {

            // 关闭定时器
            clearInterval(time)
            // 删除元素
            arr.splice(random, 1)
            console.log(arr)
        })



    </script>
</body>

</html>

1.3 事件监听版本

DOM L0 :事件源.on事件 = function() { }
DOM L2 :事件源.addEventListener(事件, 事件处理函数)
两者区别:
  • on方式会被覆盖相同的事件(比如alert),addEventListener方式可绑定多次,拥有事件更多特性,推荐使用

2.事件类型

       

2.1 事件类型案例

2.1.1 轮播图点击切换

需求:当点击左右的按钮,可以切换轮播图
分析:
①:右侧按钮点击,变量++,如果大于等于8,则复原0
②:左侧按钮点击,变量--,如果小于0,则复原最后一张
③:鼠标经过暂停定时器
④:鼠标离开开启定时器

⑤:   鼠标经过和鼠标离开触发事件

效果:

20240804_182140

代码:

<!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>
  <style>
    * {
      box-sizing: border-box;
    }

    .slider {
      width: 560px;
      height: 400px;
      overflow: hidden;
    }

    .slider-wrapper {
      width: 100%;
      height: 320px;
    }

    .slider-wrapper img {
      width: 100%;
      height: 100%;
      display: block;
    }

    .slider-footer {
      height: 80px;
      background-color: rgb(100, 67, 68);
      padding: 12px 12px 0 12px;
      position: relative;
    }

    .slider-footer .toggle {
      position: absolute;
      right: 0;
      top: 12px;
      display: flex;
    }

    .slider-footer .toggle button {
      margin-right: 12px;
      width: 28px;
      height: 28px;
      appearance: none;
      border: none;
      background: rgba(255, 255, 255, 0.1);
      color: #fff;
      border-radius: 4px;
      cursor: pointer;
    }

    .slider-footer .toggle button:hover {
      background: rgba(255, 255, 255, 0.2);
    }

    .slider-footer p {
      margin: 0;
      color: #fff;
      font-size: 18px;
      margin-bottom: 10px;
    }

    .slider-indicator {
      margin: 0;
      padding: 0;
      list-style: none;
      display: flex;
      align-items: center;
    }

    .slider-indicator li {
      width: 8px;
      height: 8px;
      margin: 4px;
      border-radius: 50%;
      background: #fff;
      opacity: 0.4;
      cursor: pointer;
    }

    .slider-indicator li.active {
      width: 12px;
      height: 12px;
      opacity: 1;
    }
  </style>
</head>

<body>
  <div class="slider">
    <div class="slider-wrapper">
      <img src="./images/slider01.jpg" 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">
        <button class="prev">&lt;</button>
        <button class="next">&gt;</button>
      </div>
    </div>
  </div>
  <script>
    // 1. 初始数据
    const data = [
      { url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
      { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
      { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
      { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
      { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
      { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
      { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
      { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
    ]

    //设置变量
    let i = 0

    //2.获取数组对象
    const img = document.querySelector('.slider-wrapper img')
    const p = document.querySelector('.slider-footer p')
    const col = document.querySelector('.slider-footer')

    //3.点击鼠标next按钮事件
    const next = document.querySelector('.next')
    next.addEventListener('click', function () {
      //自增
      i++
      //重刚开始播放
      if (i >= data.length) {
        i = 0
      }
      //页面渲染函数
      toggle()
    })

    //4.点击鼠标prev按钮事件
    const prev = document.querySelector('.prev')
    prev.addEventListener('click', function () {
      //自减
      i--
      //重最后一个往前播放
      if (i < 0) {
        i = data.length - 1
      }
      //页面渲染函数
      toggle()
    })

    //5.自动播放
    let spread = setInterval(function () {
      //调用js内部函数实现自动播放
      next.click()
    }, 1000)

    //6.鼠标在大盒子里面(停止自动播放)
    const box = document.querySelector('.slider')
    box.addEventListener('mouseenter', function () {
      //停止定时器
      clearInterval(spread)
    })


    //7.鼠标在大盒子外面(自动播放)
    box.addEventListener('mouseleave', function () {

      //先停止定时器
      clearInterval(spread)
      //再开启定时器
      spread = setInterval(function () {
        //调用js内部函数实现自动播放
        next.click()
      }, 1000)
    })

    //自定义函数(抽取重复的代码块)
    function toggle() {
      //获取到的对象取值
      img.src = data[i].url
      p.innerHTML = data[i].title
      col.style.backgroundColor = data[i].color
      //让白点随着移动(先移除,再添加)
      document.querySelector('.slider-indicator .active').classList.remove('active')
      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
    }


  </script>
</body>

</html>

2.1.2 评论字数统计

需求:用户输入文字,可以计算用户输入的字数。
分析:
①:判断用输入事件 input
②:不断取得文本框里面的字符长度, 文本域.value.length
③:把获得数字给下面文本框
效果:
代码:
<!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>
  <style>
    .wrapper {
      min-width: 400px;
      max-width: 800px;
      display: flex;
      justify-content: flex-end;
    }

    .avatar {
      width: 48px;
      height: 48px;
      border-radius: 50%;
      overflow: hidden;
      background: url(./images/avatar.jpg) no-repeat center / cover;
      margin-right: 20px;
    }

    .wrapper textarea {
      outline: none;
      border-color: transparent;
      resize: none;
      background: #f5f5f5;
      border-radius: 4px;
      flex: 1;
      padding: 10px;
      transition: all 0.5s;
      height: 30px;
    }

    .wrapper textarea:focus {
      border-color: #e4e4e4;
      background: #fff;
      height: 50px;
    }

    .wrapper button {
      background: #00aeec;
      color: #fff;
      border: none;
      border-radius: 4px;
      margin-left: 10px;
      width: 70px;
      cursor: pointer;
    }

    .wrapper .total {
      margin-right: 80px;
      color: #999;
      margin-top: 5px;
      opacity: 0;
      transition: all 0.5s;
    }

    .list {
      min-width: 400px;
      max-width: 800px;
      display: flex;
    }

    .list .item {
      width: 100%;
      display: flex;
    }

    .list .item .info {
      flex: 1;
      border-bottom: 1px dashed #e4e4e4;
      padding-bottom: 10px;
    }

    .list .item p {
      margin: 0;
    }

    .list .item .name {
      color: #FB7299;
      font-size: 14px;
      font-weight: bold;
    }

    .list .item .text {
      color: #333;
      padding: 10px 0;
    }

    .list .item .time {
      color: #999;
      font-size: 12px;
    }
  </style>
</head>

<body>
  <div class="wrapper">
    <i class="avatar"></i>
    <textarea id="tx" placeholder="发一条友善的评论" rows="2" maxlength="200"></textarea>
    <button>发布</button>
  </div>
  <div class="wrapper">
    <span class="total">0/200字</span>
  </div>
  <div class="list">
    <div class="item" style="display: none;">
      <i class="avatar"></i>
      <div class="info">
        <p class="name">清风徐来</p>
        <p class="text">大家都辛苦啦,感谢各位大大的努力,能圆满完成真是太好了[笑哭][支持]</p>
        <p class="time">2022-10-10 20:29:21</p>
      </div>
    </div>
  </div>

  <script>
    //获取文本域对象
    const tx = document.querySelector('#tx')
    //获取评论字数对象
    const total = document.querySelector('.total')
    /* 触发事件 */
    //当鼠标焦聚在表单,就让opacity变成不透明就可以看到评论数子
    tx.addEventListener('focus', function () {
      total.style.opacity = 1
    })
    //当鼠标失去焦聚在表单,就让opacity变成透明就看不到评论数子
    tx.addEventListener('blur', function () {
      total.style.opacity = 0
    })
    //获取表单输入字数,写到评论字数的对象中
    tx.addEventListener('input', function () {
      total.innerHTML = `${tx.value.length}/200字`
    })


  </script>
</body>

</html>

3.事件对象

3.1 获取事件对象

事件对象是什么?
  • Ø 也是个对象,这个对象里有事件触发时的相关信息
  • Ø 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息
使用场景:
  • Ø 可以判断用户按下哪个键,比如按下回车键可以发布新闻
  • Ø 可以判断鼠标点击了哪个元素,从而做相应的操作

下图,只有我鼠标按下删除键,才会删除该信息

语法:
  • Ø 在事件绑定的回调函数的第一个参数就是事件对象
  • Ø 一般命名为event、ev、e

3.2 事件对象常用属性

目标:能够使用常见事件对象属性
部分常用属性:
Ø type
  • p 获取当前的事件类型
Ø clientX/clientY
  • p 获取光标相对于浏览器可见窗口左上角的位置
Ø offsetX/offsetY
  • p 获取光标相对于当前DOM元素左上角的位置
Ø key
  • p 用户按下的键盘键的值
  • p 现在不提倡使用keyCode

3.3 事件对象案例

评论回车发布
需求:按下回车键盘,可以发布信息
分析:
①:用到按下键盘事件 keydown 或者 keyup 都可以
②:如果用户按下的是回车键盘,则发布信息
③:让留言信息模块显示 把拿到的数据渲染到对应标签内部
代码:
<!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>
    <style>
        .wrapper {
            min-width: 400px;
            max-width: 800px;
            display: flex;
            justify-content: flex-end;
        }

        .avatar {
            width: 48px;
            height: 48px;
            border-radius: 50%;
            overflow: hidden;
            background: url(./images/avatar.jpg) no-repeat center / cover;
            margin-right: 20px;
        }

        .wrapper textarea {
            outline: none;
            border-color: transparent;
            resize: none;
            background: #f5f5f5;
            border-radius: 4px;
            flex: 1;
            padding: 10px;
            transition: all 0.5s;
            height: 30px;
        }

        .wrapper textarea:focus {
            border-color: #e4e4e4;
            background: #fff;
            height: 50px;
        }

        .wrapper button {
            background: #00aeec;
            color: #fff;
            border: none;
            border-radius: 4px;
            margin-left: 10px;
            width: 70px;
            cursor: pointer;
        }

        .wrapper .total {
            margin-right: 80px;
            color: #999;
            margin-top: 5px;
            opacity: 0;
            transition: all 0.5s;
        }

        .list {
            min-width: 400px;
            max-width: 800px;
            display: flex;
        }

        .list .item {
            width: 100%;
            display: flex;
        }

        .list .item .info {
            flex: 1;
            border-bottom: 1px dashed #e4e4e4;
            padding-bottom: 10px;
        }

        .list .item p {
            margin: 0;
        }

        .list .item .name {
            color: #FB7299;
            font-size: 14px;
            font-weight: bold;
        }

        .list .item .text {
            color: #333;
            padding: 10px 0;
        }

        .list .item .time {
            color: #999;
            font-size: 12px;
        }
    </style>
</head>

<body>
    <div class="wrapper">
        <i class="avatar"></i>
        <textarea id="tx" placeholder="发一条友善的评论" rows="2" maxlength="200"></textarea>
        <button>发布</button>
    </div>
    <div class="wrapper">
        <span class="total">0/200字</span>
    </div>
    <div class="list">
        <div class="item" style="display: none;">
            <i class="avatar"></i>
            <div class="info">
                <p class="name">清风徐来</p>
                <p class="text">大家都辛苦啦,感谢各位大大的努力,能圆满完成真是太好了[笑哭][支持]</p>
                <p class="time">2022-10-10 20:29:21</p>
            </div>
        </div>
    </div>

    <script>
        //获取文本域对象
        const tx = document.querySelector('#tx')
        //获取评论字数对象
        const total = document.querySelector('.total')
        //获取评论留言对象
        const text = document.querySelector('.text')
        //获取盒子对象
        const item = document.querySelector('.item')
        /* 触发事件 */
        //当鼠标焦聚在表单,就让opacity变成不透明就可以看到评论数子
        tx.addEventListener('focus', function () {
            total.style.opacity = 1
        })
        //当鼠标失去焦聚在表单,就让opacity变成透明就看不到评论数子
        tx.addEventListener('blur', function () {
            total.style.opacity = 0
        })
        //获取表单输入字数,写到评论字数的对象中
        tx.addEventListener('input', function () {
            total.innerHTML = `${tx.value.length}/200字`
        })
        //按下回车键就发布评论
        tx.addEventListener('keyup', function (e) {
            if (e.key === 'Enter') {
                if (tx.value.trim()) {
                    //把表单的评论写入对象
                    text.innerHTML = `${tx.value}`
                    //显示评论留言
                    item.style.display = 'block'
                }

                //按完回车键后,清空表单的数据
                tx.value = ''
                //清空表单显示的字数
                total.innerHTML = '0/200字'
            }

        })



    </script>
</body>

</html>

4.环境对象

目标:能够分析判断函数运行在不同环境中 this 所指代的对象
环境对象: 指的是函数内部特殊的 变量 this ,它代表着当前函数运行时所处的环境
作用: 弄清楚this的指向,可以让我们代码更简洁
  • Ø 函数的调用方式不同,this 指代的对象也不同
  • Ø 【谁调用, this 就是谁】 是判断 this 指向的粗略规则
  • Ø 直接调用函数,其实相当于是 window.函数,所以 this 指代 window

5.回调函数

目标:能够说出什么是回调函数
如果将函数 A 做为参数传递给函数 B 时,我们称函数 A 为 回调函数
简单理解: 当一个函数当做参数来传递给另外一个函数的时候,这个函数就是 回调函数
常见的使用场景:

6.综合案例

Tab栏切换
需求:鼠标经过不同的选项卡,底部可以显示 不同的内容
分析:
  • ①:主要核心是类的切换, 设定一个当前类,可以让当前元素高亮
  • ②:鼠标经过当前选项卡,先移除其余元素身上的当前类,而只给当前元素添加类,
  • ③:注意,当前类只能有一个

演示:

代码:

<!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>tab栏切换</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .tab {
      width: 590px;
      height: 340px;
      margin: 20px;
      border: 1px solid #e4e4e4;
    }

    .tab-nav {
      width: 100%;
      height: 60px;
      line-height: 60px;
      display: flex;
      justify-content: space-between;
    }

    .tab-nav h3 {
      font-size: 24px;
      font-weight: normal;
      margin-left: 20px;
    }

    .tab-nav ul {
      list-style: none;
      display: flex;
      justify-content: flex-end;
    }

    .tab-nav ul li {
      margin: 0 20px;
      font-size: 14px;
    }

    .tab-nav ul li a {
      text-decoration: none;
      border-bottom: 2px solid transparent;
      color: #333;
    }

    .tab-nav ul li a.active {
      border-color: #e1251b;
      color: #e1251b;
    }

    .tab-content {
      padding: 0 16px;
    }

    .tab-content .item {
      display: none;
    }

    .tab-content .item.active {
      display: block;
    }
  </style>
</head>

<body>
  <div class="tab">
    <div class="tab-nav">
      <h3>每日特价</h3>
      <ul>
        <li><a class="active" href="javascript:;">精选</a></li>
        <li><a href="javascript:;">美食</a></li>
        <li><a href="javascript:;">百货</a></li>
        <li><a href="javascript:;">个护</a></li>
        <li><a href="javascript:;">预告</a></li>
      </ul>
    </div>
    <div class="tab-content">
      <div class="item active"><img src="./images/tab00.png" alt="" /></div>
      <div class="item"><img src="./images/tab01.png" alt="" /></div>
      <div class="item"><img src="./images/tab02.png" alt="" /></div>
      <div class="item"><img src="./images/tab03.png" alt="" /></div>
      <div class="item"><img src="./images/tab04.png" alt="" /></div>
    </div>
  </div>

  <script>
    const as = document.querySelectorAll('.tab-nav a')
    for (let i = 0; i < as.length; i++) {
      //当鼠标经过标签就触发事件
      as[i].addEventListener('mouseenter', function () {
        //排他思想(先移除,在添加)
        document.querySelector('.tab-nav .active').classList.remove('active')
        //添加当前鼠标经过的标签
        this.classList.add('active')

        //当鼠标经过该标签之后,显示对应的隐形大盒子
        //排他思想(先移除,在添加)
        document.querySelector('.tab-content .active').classList.remove('active')
        // 对应序号的那个 item 显示 添加 active 类
        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')
      })
    }
  </script>
</body>

</html>

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

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

相关文章

【技术前沿】3.3KW高功率密度新突破!基于Infineon XMC1400搭配CoolSiC™ Mosfet 的PFC数字电源方案

随着社会经济发展、能源结构变革&#xff0c;近几年全球对家用储能系统的需求量一直保持相当程度的增长。2023年&#xff0c;全球家用储能系统市场销售额达到了87.4亿美元&#xff0c;预计2029年将达到498.6亿美元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;为33.68…

定时任务-xxl-job

一. 为什么定时任务可以定时执行 定时任务可以定时执行的原理是通过操作系统提供的定时器实现的。 以下是定时任务能够准时执行的基本原理和相关技术&#xff1a; 操作系统的调度器&#xff1a; 操作系统&#xff08;如Linux、Windows等&#xff09;内部都有一个调度器&#x…

TortoiseGit小乌龟在gitlab配置ssh免密

1. 生成ssh密钥(默认在~/.ssh路径生产&#xff0c;id_rsa和id_rsa.pub) ssh-keygen -t rsa -b 4096 -C "xxxqq.com"2. 打开gitlab&#xff0c;在搜索栏搜索ssh&#xff0c;找到SSH Keys&#xff0c;然后添加id_rsa.pub公钥的内容到网页&#xff0c;保存。 3. 打开To…

如何将PostgreSQL的数据实时迁移到SelectDB?

PostgreSQL 作为一个开源且功能强大的关系型数据库管理系统&#xff0c;在 OLTP 系统中得到了广泛应用。很多企业利用其卓越的性能和灵活的架构&#xff0c;应对高并发事务、快速响应等需求。 然而对于 OLAP 场景&#xff0c;PostgreSQL 可能并不是最佳选择。 为了实现庞大规…

数据结构(其三)--栈与队列

目录 5.栈 5.1 栈的基本操作 5.2 各种栈 &#xff08;1&#xff09;.顺序栈 i.普通顺序栈 ii.共享栈 iii.关于销毁 &#xff08;2&#xff09;.链栈 6.队列 6.1 队列的基本操作 6.2 各种队列 &#xff08;1&#xff09;.循环队列 i.代码 ii.另外一种写法 &#xff08…

[Latex美化]-表格加底色,添加灰色美化表格,便于阅读

1 导入库 \usepackage{xcolor} \usepackage{colortbl, booktabs} 2 插入指令&#xff08;指定行前&#xff09; \rowcolor{gray!30} 具体代码如下 效果如下

循环神经网络RNN介绍

文章目录 1、学习介绍2、RNN的基本结构2.1、图例2.2、公式2.3、公式计算示例2.3.1、给定参数2.3.2、时间步计算 3、序列依赖与梯度消失/爆炸3.1、序列依赖3.2、梯度消失与爆炸3.3、总结 4、传统的前馈神经网络4.1、结构4.2、工作原理4.3、特点4.4、局限性 5、CNN与RNN的关系5.1…

【建造者模式】全面解析与最佳实践:打造复杂对象的蓝图(构建复杂对象的艺术)

文章目录 Java中的建造者模式&#xff1a;全面解析与最佳实践1. 引言2. 建造者模式概念定义与用途适用场景解决的问题 3. 建造者模式原理主要角色解释工作流程UML图和时序图 4. 建造者模式在Java中的实现逐步构建示例程序1. 创建抽象建造者类2. 实现具体建造者类3. 设计产品类4…

如何在厂商软件不提供二次开发资源的情况下实现LabVIEW开发

在遇到厂商提供的软件不支持二次开发资源时&#xff0c;如果需要使用LabVIEW进行开发&#xff0c;通常面临以下几个挑战&#xff1a;设备通讯接口封闭、协议不公开、厂商技术支持有限等。这些问题需要综合考虑并制定解决方案&#xff0c;以下是详细的分析&#xff1a; 1. 了解原…

权限模块开发+权限与角色关联(完整CRUD)

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.easycode生成代码1.配置2.AuthPermissionDao.java剪切到mapp…

SharpLab:.Net反编译工具,方便实时查看反编译后的代码!

C#提供了很多高级语法&#xff0c;很多都是语法糖。这些语法糖对于初学者来说&#xff0c;很多无法理解。 下面推荐一个开源项目&#xff0c;它能够让我们&#xff0c;实时查看编译过程、生成的中间语言&#xff08;IL&#xff09;以及反编译后的代码。 01 项目简介 SharpLa…

C语言 ——深入理解指针(2)

目录 1. 数组名的理解2. 二级指针3. 指针数组4. 字符指针变量5. 数组指针变量6. 函数指针变量7. 函数指针数组 1. 数组名的理解 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址&#x…

TabLayout使用以及自定义tab标签

<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…

YoloV10 论文翻译(Real-Time End-to-End Object Detection)

​摘要 近年来&#xff0c;YOLO因其在计算成本与检测性能之间实现了有效平衡&#xff0c;已成为实时目标检测领域的主流范式。研究人员对YOLO的架构设计、优化目标、数据增强策略等方面进行了探索&#xff0c;并取得了显著进展。然而&#xff0c;YOLO对非极大值抑制&#xff0…

01【功能项目】之【主角射线点击导航】

首先创建一个Unity3D的项目 打开资源商店添加一个人物模型 选择一个免费资源主角添加至项目中 在unity中打开后点击下载包 点击导入包 导入成功后会出现在资源包Assets下 右键创建地面 设置地面尺寸 创建一个材料方便给地面调配颜色 选择材料的颜色 将材质拖拽给地面组为组件 将…

double类型 精度丢失的问题

前言 精度丢失的问题是在其他计算机语言中也都会出现&#xff0c;float和double类型的数据在执行二进制浮点运算的时候&#xff0c;并没有提供完全精确的结果。产生误差不在于数的大小&#xff0c;而是因为数的精度。 一、double进行运算时,经常出现精度丢失 0.10.2使用计算…

QTableView使用示例-Qt模型视图代理(Model-View-Delegate)使用示例

模型视图委托&#xff08;MVD&#xff09;是Qt中特有的设计模式&#xff0c;类似MVC设计模式&#xff0c;将MVC设计模式中的Controller当做MVD中的Delegate&#xff0c;两者的概念基本相同。不同的是委托不是独立存在&#xff0c;而是包含在视图里面。 模型视图委托设计模式中&…

#71结构体案例2(三国游戏,冒泡排序)

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <string> using namespace std;//英雄结构体 struct Hero {string name;int age;string gender; };//冒泡排序 void bubbleSort(struct Hero hArray[],int len) {for(int i0;i<len-1;i){for(i…

CentOS 8 本地创建yum源

1.获取iso (有iso就可以建立本地repo) 如CentOS-8.5.2111-aarch64-dvd1.iso 2.解压iso&#xff08;mount挂载就可以吧iso解压到linux某一目录中&#xff09; mkdir /mnt/cdrom mount -o loop ./CentOS-Stream-8-aarch64-20220913-dvd1.iso /mnt/cdrom ls /mnt/cdrom 3.编…

奇偶函数的性质及运算

目录 定义 注意 特征 运算 拓展 定义 设函数f(x)的定义域D&#xff1b; 如果对于函数定义域D内的任意一个x&#xff0c;都有f(-x)&#xff0d;f&#xff08;x&#xff09;&#xff0c;那么函数f&#xff08;x&#xff09;就叫做奇函数。如果对于函数定义域D内的任意一个x…