轮播图、阅读注册协议、网页时钟、随机点名、小米搜索框、轮播图点击切换——web APIs练习

news2024/11/26 10:39:35

目录

一、获取元素(DOM)

1. 随机轮播图案例

2. 阅读注册协议(定时器间歇函数的应用)

3. 轮播图定时器版

4. 网页时钟

二、事件基础(DOM)

1. 随机点名案例

2. 轮播图点击切换(重点)

3. 小米搜索框案例

一、获取元素(DOM)

1. 随机轮播图案例

<!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>
    * {
        padding: 0;
        margin: 0;
        box-sizing: border-box;
    }
    li {
        list-style: none;
    }
    .slider {
      width: 560px;
      height: 400px;
      overflow: hidden;
    }
    .slider-wrapper {
      width: 100%;
      height: 320px;
      background-color: pink;
    }
    .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></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <div class="toggle">
            <button class="pre">&lt;</button>
            <button class="next">&gt;</button>       
        </div>
    </div>
  </div>
  <script>
    // 1. 初始数据
    const sliderData = [
      { 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)' },
    ]
    // 1. 获取随机数
    const random = Math.floor(Math.random() * sliderData.length)

    // 2. 把对应的数据渲染到标签里
    // 2.1 获取图片元素
    const img = document.querySelector('.slider-wrapper img')
    // 2.2 修改图片路径 = 对象.url
    img.src = sliderData[random].url

    // 3. 把p里面的文字内容替换
    // 3.1获取p元素
    const p = document.querySelector('.slider-footer p')
    // 3.2 修改p
    p.innerHTML = sliderData[random].title

    // 4. 把下部的背景色改变
    // 4.1 获取slider-footer
    const footer = document.querySelector('.slider-footer')
    // 4.2 修改
    footer.style.backgroundColor = sliderData[random].color

    // 5. 小圆点
    const li = document.querySelector(`.slider-indicator li:nth-child(${random + 1})`)
    // 让当前这个li添加 active这个类
    li.classList.add('active')
  </script>
</body>
</html>

2. 阅读注册协议(定时器间歇函数的应用)

<body>
    <textarea name="" id="" cols="30" rows="10">
        用户注册协议
        欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体或下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。
        【请您注意】如果您不同意以下协议全部或任何条款约定,请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息,阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容,并表明您同意我们可以依据协议内容来处理您的个人信息,并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方(详情查看
    </textarea>
    <br>
    <button class="btn" disabled>我已经阅读用户协议(10)</button>
    <script>
        // 1. 获取按钮
        const btn = document.querySelector('.btn')
        // 2. 倒计时
        let i = 10
        // 开启定时器
        let timer = setInterval(function () {
            i--
            btn.innerHTML = `我已经阅读用户协议(${i})`
            if (i === 0) {
                
                clearInterval(timer) //关闭定时器
                // 定时器停了,就关闭禁用
                btn.disabled = false
                btn.innerHTML = '同意'
            }
        }, 1000)
    </script>

3. 轮播图定时器版

注意:在结构中第一个li一定要先加上active类,因为后面小圆点的做法是排他思想,先将有active类的去掉,然后为当前原点添加active,故若先前元素都没有active,则去掉active这个代码会报错。

  <style>
    * {
        padding: 0;
        margin: 0;
        box-sizing: border-box;
    }
    li {
        list-style: none;
    }
    .slider {
      width: 560px;
      height: 400px;
      overflow: hidden;
    }
    .slider-wrapper {
      width: 100%;
      height: 320px;
      background-color: pink;
    }
    .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="pre">&lt;</button>
            <button class="next">&gt;</button>       
        </div>
    </div>
  </div>
  <script>
    // 1. 初始数据
    const sliderData = [
      { 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)' },
    ]
        // 1. 获取元素
        const img = document.querySelector('.slider-wrapper img')
        const p = document.querySelector('.slider-footer p')
        const footer = document.querySelector('.slider-footer')

        let i = 0 //信号量 控制图片的张数
        // 2. 开启定时器
        setInterval(function() {
            i++
            // 无缝衔接位置 一共八张图片,到了最后一张就是8,数组的长度就是8
            if(i >= sliderData.length) {
                i = 0
            }
            // console.log(sliderData[i]);
            // 渲染标签
            // 更换图片路径
            img.src = sliderData[i].url
            // 更换P标签中的文字
            p.innerHTML = sliderData[i].title
            // 更换背景颜色
            footer.style.backgroundColor = sliderData[i].color
            // 小圆点
            // 先删除以前的active
            document.querySelector('.slider-indicator .active').classList.remove('active')
            // 只让当前的Li添加active
            document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
            
        }, 1000)

另一个不包含小圆点的轮播图案例:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>QQ音乐10屏轮播图</title>
    <style>
        .img-box {
            width: 700px;
            height: 320px;
            margin: 50px auto 0;
            background: #000;
            position: relative;
        }

        .img-box .tip {
            width: 700px;
            height: 53px;
            line-height: 53px;
            position: absolute;
            bottom: 0px;
            background-color: rgba(0, 0, 0, 0.8);
            z-index: 10;
        }

        .img-box .tip h3 {
            width: 82%;
            margin: 0;
            margin-right: 20px;
            padding-left: 20px;
            color: #98E404;
            font-size: 28px;
            float: left;
            font-weight: 500;
            font-family: "Microsoft Yahei", Tahoma, Geneva;
        }

        .img-box .tip a {
            width: 30px;
            height: 29px;
            display: block;
            float: left;
            margin-top: 12px;
            margin-right: 3px;
        }

        .img-box ul {
            position: absolute;
            bottom: 0;
            right: 30px;
            list-style: none;
            z-index: 99;
        }
    </style>
</head>

<body>
    <div class="img-box">
        <img class="pic" src="images/b01.jpg" alt="第1张图的描述信息">
        <div class="tip">
            <h3 class="text">挑战云歌单,欢迎你来</h3>
        </div>
    </div>

    <script>
        // 数据
        const data = [
            {
                imgSrc: 'images/b01.jpg',
                title: '挑战云歌单,欢迎你来'
            },
            {
                imgSrc: 'images/b02.jpg',
                title: '田园日记,上演上京记'
            },
            {
                imgSrc: 'images/b03.jpg',
                title: '甜蜜攻势再次回归'
            },
            {
                imgSrc: 'images/b04.jpg',
                title: '我为歌狂,生为歌王'
            },
            {
                imgSrc: 'images/b05.jpg',
                title: '年度校园主题活动'
            },
            {
                imgSrc: 'images/b06.jpg',
                title: 'pink老师新歌发布,5月10号正式推出'
            },
            {
                imgSrc: 'images/b07.jpg',
                title: '动力火车来到西安'
            },
            {
                imgSrc: 'images/b08.jpg',
                title: '钢铁侠3,英雄镇东风'
            },
            {
                imgSrc: 'images/b09.jpg',
                title: '我用整颗心来等你'
            },
        ]
        // 获取元素 图片 和 h3
        const img = document.querySelector('.img-box .pic')
        const h3 = document.querySelector('.img-box .tip .text')
        // 记录图片的张数
        let i = 0
        // 开启定时器
        setInterval(function(){
            i++
            // 无缝衔接
            if (i >= data.length) {
                i = 0
            }
            // 修改图片的src属性
            img.src = data[i].imgSrc
            // 修改文字内容
            h3.innerHTML = data[i].title
        },1000)
    </script>
</body>

</html>

4. 网页时钟

<!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-sizing: border-box;
        }
        .clock {
            position: relative;
            width: 600px;
            height: 600px;
            margin: 50px auto 0;
            background: url(./images/clock.jpg) no-repeat;
        }
        .hh,
        .mm,
        .ss {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background: url(./images/hour.png) no-repeat center;
        }
        .hh {
            
        }
        .mm {
            background-image: url(./images/minute.png);
            transform: rotate(270deg);
        }
        .ss {
            background-image: url(./images/second.png);
            transform: rotate(0deg);
        }
       
      </style>
</head>
<body>
    <div class="clock">
        <div class="hh" id="h"></div>
        <div class="mm" id="m"></div>
        <div class="ss" id="s"></div>
    </div>
    <script>
        // 每隔一秒转动一次秒针
        // 获取秒针元素
        const ss = document.querySelector('.clock .ss')
        let i = 0 
        // 封装时钟效果,定时器定时调用的函数
        // 通过定时器每隔一秒钟再调用一次。
        // 开启定时器
        setInterval(function() {
            i += 6
            if (i >= 360) {
                i = 0
            }
            ss.style.transform = `rotate(${i}deg)`
        },1000)
    </script>
</body>
</html>

二、事件基础(DOM)

1. 随机点名案例

<!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 = ['马超', '黄忠', '赵云', '关羽', '张飞']

        // 获取元素
        const qs = document.querySelector('.box .qs')
        // 获取开始按钮
        const start = document.querySelector('.btns .start')
        const end = document.querySelector('.btns .end')
        // 随机号为全局变量
        let random = 0
        // 定时器的全局变量
        let timer = 0
        start.addEventListener('click', function (){
            // 如果数组中只有一个值了,还需要抽取吗?  不需要,将开始和结束按钮禁用
            if (arr.length === 1 ) {
                // start.disabled = true
                // end.disabled = true
                start.disabled = end.disabled = true
            }
            timer = setInterval(function () {
                random = Math.floor(Math.random() * arr.length)
                qs.innerHTML = arr[random]
            }, 100)
        })
        end.addEventListener('click', function (){
            clearInterval(timer)
            qs.innerHTML = arr[random]
            arr.splice(random, 1)
        })
    </script>
</body>

</html>

2. 轮播图点击切换(重点)

注意封装函数,实现代码的复用

对于自动播放可以利用 js 自动调用点击事件 next.click( ) ,注意要加小括号

<!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;
        }
        li {
            list-style: none;
        }
        .slider {
          width: 560px;
          height: 400px;
          overflow: hidden;
        }
        .slider-wrapper {
          width: 100%;
          height: 320px;
          background-color: pink;
        }
        .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="pre">&lt;</button>
                <button class="next">&gt;</button>       
            </div>
        </div>
      </div>
      <script>
        // 1. 初始数据
        const sliderData = [
          { 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)' },
        ]
            // 获取元素
            const img = document.querySelector('.slider-wrapper img')
            const p = document.querySelector('.slider-footer p')
            const footer = document.querySelector('.slider-footer')
           
            // 1.右按钮业务
            // 1.1获取右侧按钮
            const next = document.querySelector('.toggle .next')
            let i = 0 //信号量 控制图片的张数
            // 1.2 点击切换事件
            next.addEventListener('click', function(){
                i++
                // 1.6 判断条件,如果大于8 就复原为0
                if (i >= sliderData.length) {
                    i = 0
                }
                // 1.3得到对应的对象
                // console.log(sliderData[i])
                // 调用函数
                toggle()
            })
            // 2.左按钮业务
            // 2.1获取左侧按钮
            const pre = document.querySelector('.toggle .pre')
            // 2.2 点击切换事件
            pre.addEventListener('click', function(){
                i--
                // 2.6 判断条件,如果小于8 就复原为7
                if (i < 0) {
                    i = sliderData.length - 1
                }
                // 2.3得到对应的对象
                // console.log(sliderData[i])
                // 调用函数
               toggle()
            })
            // 声明一个渲染的函数作为复用
            function toggle() {
                // 1.4 渲染对应的数据
                img.src = sliderData[i].url
                p.innerHTML = sliderData[i].title
                footer.style.backgroundColor = sliderData[i].color
                // 1.5 更换小圆点 先移除原来的类名,再为当前li添加这个类
                document.querySelector('.slider-indicator .active').classList.remove('active')
                document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
            }

            // 3.自动播放模块
            let timer = setInterval(function(){
                // 利用js 自动调用点击事件 注意要加小括号
                next.click()
            }, 1000)

            // 4.鼠标经过最大的盒子元素,停止计时器
            const slider = document.querySelector('.slider')
            // 注册事件
            slider.addEventListener('mouseenter',function(){
                // 停止计时器
                clearInterval(timer)
            })

            // 5.鼠标离开最大的盒子元素,开始计时器
             // 注册事件
            slider.addEventListener('mouseleave',function(){
                // 开启计时器
                timer = setInterval(function(){
                // 利用js 自动调用点击事件 注意要加小括号
                next.click()
            }, 1000)
            })
    </script>
</body>

</html>

3. 小米搜索框案例

当搜索框获得焦点时为其添加边框样式,无焦点时边框去掉

<!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;
        }

        ul {

            list-style: none;
        }

        .mi {
            position: relative;
            width: 223px;
            margin: 100px auto;
        }

        .mi input {
            width: 223px;
            height: 48px;
            padding: 0 10px;
            font-size: 14px;
            line-height: 48px;
            border: 1px solid #e0e0e0;
            outline: none;
        }
        /* 当搜索框获得焦点时为其添加的边框样式 */
        .mi .search {
            border: 1px solid #ff6700;
        }

        .result-list {
            /* 先为其添加隐藏 */
            display: none;
            position: absolute;
            left: 0;
            top: 48px;
            width: 223px;
            border: 1px solid #ff6700;
            border-top: 0;
            background: #fff;
        }

        .result-list a {
            display: block;
            padding: 6px 15px;
            font-size: 12px;
            color: #424242;
            text-decoration: none;
        }

        .result-list a:hover {
            background-color: #eee;
        }
    </style>
</head>
<body>
    <div class="mi">
        <input type="search" placeholder="小米笔记本">
        <ul class="result-list">
            <li><a href="#">全部商品</a></li>
            <li><a href="#">小米11</a></li>
            <li><a href="#">小米10S</a></li>
            <li><a href="#">小米笔记本</a></li>
            <li><a href="#">小米手机</a></li>
            <li><a href="#">黑鲨4</a></li>
            <li><a href="#">空调</a></li>
        </ul>
    </div>
    <script>
        // 1. 使用属性选择器获得搜索框
        const input = document.querySelector('[type=search]')
        const result = document.querySelector('.result-list')
        // 2. 监听事件 焦点
        input.addEventListener('focus', function(){
            result.style.display = 'block'
            // 当搜索框获得焦点时为其添加边框样式
            input.classList.add('search')
        })
        input.addEventListener('blur', function(){
            result.style.display = 'none'
            input.classList.remove('search')
        })
    </script>
</body>

</html>

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

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

相关文章

Python、Java、JavaScript、C、Go等编程语言如何实现“定时器”功能

这是CSDN平台2月推出的一个活动(活动链接为&#xff1a;CSDN 征文活动)&#xff0c;聊聊时间的话题&#xff0c;小编我也不知道有什么好聊的时间的话题&#xff0c;看了CSDN给出的部分话题上&#xff0c;有一个这样的话题&#xff0c;如何用各种编程语言实现“定时器”&#xf…

初识SpringSpring核心容器

初识Spring Spring生态&#xff1a; Spring FrameWork发展&#xff1a; Spring FrameWork系统架构&#xff1a; Spring FrameWork学习路线&#xff1a; Spring核心概念 Ioc DI 实现IoC 1、导入Spring坐标 2、定义Spring管理的类&#xff08;接口&#xff09; 3、创建spring配…

tensorflow 学习笔记(三):神经网络八股

本节内容&#xff1a; 前两节使用 Tensorflow2 的原生代码大叫神经网络。本节使用 keras 搭建神经网络&#xff08;八股&#xff1a;六步法&#xff0c;有 Sequential 和 class 两种&#xff09;。 文章目录一、搭建网络八股 sequential1.1、keras 介绍1.2、六步法搭建 keras …

Mac搭建appium+python+Android自动化环境

mac搭建appium+python+Android自动化环境 一、安装jdk二、安装Android-SDK三、配置 Android 环境四、安装Appium五、打开appium一、安装jdk 自己百度 二、安装Android-SDK 1)下载地址: http://www.android-studio.org/index.php/download 下载mac版本的dmg 2) 下载完成后…

HTTPS:让数据传输更安全

鉴于 HTTP 的明文传输使得传输过程毫无安全性可言&#xff0c;且制约了网上购物、在线转账等一系列场景应用&#xff0c;于是引入加密方案。 从 HTTP 协议栈层面来看&#xff0c;我们可以在 TCP 和 HTTP 之间插入一个安全层&#xff0c;所有经过安全层的数据都会被加密或者解密…

关于虚拟数字人你想知道的都在这里

2022年底&#xff0c;微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红&#xff0c;5天用户量超百万&#xff0c;在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业&#xff0c;AI虚拟数字人就是其中之一&#xff0c;一个随着元宇…

损失函数与反向传播

一、损失函数计算实际输出和目标之间的差距为我们更新输出提供一定的依据&#xff08;反向传播&#xff09;1.nn.L1Lossimport torch from torch.nn import L1Loss inputs torch.tensor([1,2,3],dtypetorch.float) targets torch.tensor([1,2,5],dtypetorch.float) # reshape…

Docker之路(4.Docker命令大全、docker镜像命令、docker容器命令以及docker常用命令)

1.帮助命令 1.1 docker version(显示docker的版本信息) sudo docker version1.2 docker info(显示docker的系统信息&#xff0c;包括镜像和容器数量) sudo docker info1.3 --help (万能命令) sudo 命令 --help1。4 帮助文档的地址 https://docs.docker.com/engine/referenc…

纯手动搭建hadoop3.x集群记录001_搭建虚拟机_调通网络_配置静态IP_安装JDK---大数据之Hadoop3.x工作笔记0162

1.首先准备机器,172.19.126.115 172.19.126.116 172.19.126.117 我准备了3台 Windows机器 2.然后我打算在Windows机器上使用虚拟机,搭建3台Centos虚拟机来进行安装hadoop 3.这里我们的3台windows机器中的,3台linux虚拟机也使用了3个IP,分别是 172.19.126.120 172.19.126.1…

自然语言处理(NLP)之跳字(元)模型<skip-gram>与连续词袋模型<continuous bag of words>

自然语言处理(Natural Language Processing, NLP)是AI里的一个非常重要的领域&#xff0c;比如现在很火爆的ChatGPT&#xff0c;首先就需要很好的理解输入内容的意思才能够做出合理的回复。自然语言处理应用非常广泛&#xff0c;比如机器翻译、问题回答、文本语义对比、语音识别…

整合Swagger2

整合Swagger2 1、Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 1、及时性 (接口变更后&#xff0c;能够及时准确地通知相关前后端开发人员…

Java企业开发学习笔记(4)采用Java配置类管理Bean

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/1fwEO】 文章目录一、采用Java配置类管理Bean1.1 创建子包1.2 创建杀龙任务类1.3 创建勇敢骑士类1.4 创建Spring配置类1.5 创建测试类1.6 运行测试类二、课堂练习2.1 创建救美任务类和救美骑士类2…

BERT模型系列大全解读

前言 本文讲解的BERT系列模型主要是自编码语言模型-AE LM&#xff08;AutoEncoder Language Model&#xff09;&#xff1a;通过在输入X中随机掩码&#xff08;mask&#xff09;一部分单词&#xff0c;然后预训练的主要任务之一就是根据上下文单词来预测这些单词&#xff0c;从…

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法&#xff0c;如SSD和YOLO等虽然实现了实时的速度&#xff0c;但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢&#xff1f;何凯明等人将其归咎于正、负样本的不平衡&#xff0c;并基于此提出了新的损失函数Focal L…

JUC并发编程(上)

✨作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 学习地址 写在最前 JUC&#xff08;Java Util Concurrent&#xff09;学习内容框架&#xff1a; #mermaid-svg-r5jN6ICeVruSjU0I …

MySQL一隐式转换

我相信90%以上的同学们在平时开发时&#xff0c;或多或少都被隐式转换&#xff08;CONVERT_IMPLICIT&#xff09;坑过&#xff0c;甚至测出bug前你都浑然不知。你还别不信&#xff0c;“无形之刃&#xff0c;最为致命&#xff01;” mysql> SELECT * from t_user; ---------…

【LeetCode】剑指 Offer 11. 旋转数组的最小数字 p82 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 1. 题目介绍&#xff08;11. 旋转数组的最小数字&#xff09; 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值…

关于微前端,你想知道的都在这!

更多请关注微前端专题 https://codeteenager.github.io/Micro-Frontends/ 介绍 微前端官网&#xff1a;https://micro-frontends.org/ 问题&#xff1a;如何实现多个应用之间的资源共享&#xff1f; 之前比较多的处理方式是npm包形式抽离和引用&#xff0c;比如多个应用项目之…

浅谈Redisson实现分布式锁的原理

1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一&#xff0c;而 Java 是世界上最流行&#xff08;注意&#xff0c;我没有说“最好”&#xff09;的编程语言之一。虽然两者看起来很自然地在一起“工作”&#xff0c;但是要知道&#xff0c;Redis 其实并没有对 Java…

windows共享文件夹(目录)(SMB服务)

SMB服务&#xff0c;文件共享服务&#xff0c;俗称文件夹&#xff08;目录&#xff09;、打印机等共享 一、创建共享用户 windos系统中&#xff0c;文件夹共享需要设置指定用户与密码&#xff0c;通过输入用户和密码进行连接&#xff0c;在设置共享时系统中有Everyone所有人设…