Web APIs 学习知识总结

news2024/12/27 13:36:50

渲染学成在线案例

html文件:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>学车在线首页</title>
    <link rel="stylesheet" href="./css/style.css">
    <style>

    </style>
</head>

<body>

    <!-- 4. box核心内容区域开始 -->
    <div class="box w">
        <div class="box-hd">
            <h3>精品推荐</h3>
            <a href="#">查看全部</a>
        </div>
        <div class="box-bd">
            <ul class="clearfix">
                
            <script>
                let data = [
                        {
                            src: 'images/course01.png',
                            title: 'Think PHP 5.0 博客系统实战项目演练',
                            num: 1125
                        },
                        {
                            src: 'images/course02.png',
                            title: 'Android 网络动态图片加载实战',
                            num: 357
                        },
                        {
                            src: 'images/course03.png',
                            title: 'Angular2 大前端商城实战项目演练',
                            num: 22250
                        },
                        {
                            src: 'images/course04.png',
                            title: 'Android APP 实战项目演练',
                            num: 389
                        },
                        {
                            src: 'images/course05.png',
                            title: 'UGUI 源码深度分析案例',
                            num: 124
                        },
                        {
                            src: 'images/course06.png',
                            title: 'Kami2首页界面切换效果实战演练',
                            num: 432
                        },
                        {
                            src: 'images/course07.png',
                            title: 'UNITY 从入门到精通实战案例',
                            num: 888
                        },
                        {
                            src: 'images/course08.png',
                            title: 'Cocos 深度学习你不会错过的实战',
                            num: 590
                        },
                    ]
                        for(let i=0;i<data.length;i++){
                            document.write(`
                            <li>
                                <a href="#">
                                    <img src=${data[i].src} title="${data[i].title}" alt="">
                                    <h4>
                                        ${data[i].title}
                                    </h4>
                                    <div class="info">
                                        <span>高级</span> • <span>${data[i].num}</span>人在学习
                                    </div>
                                </a>
                            </li>
                            `)
                        }
            </script>


            </ul>
        </div>
    </div>

</body>

</html>

css文件:

* {
    margin: 0;
    padding: 0;
}
.w {
    width: 1200px;
    margin: auto;
}
body {
    background-color: #f3f5f7;
}
li {
    list-style: none;
}
a {
    text-decoration: none;
}
.clearfix:before,.clearfix:after {
    content:"";
    display:table; 
  }
  .clearfix:after {
    clear:both;
  }
  .clearfix {
     zoom:1;
  }   
 

.box {
    margin-top: 30px;
}
.box-hd {
    height: 45px;
}
.box-hd h3 {
    float: left;
    font-size: 20px;
    color: #494949;
}
.box-hd a {
    float: right;
    font-size: 12px;
    color: #a5a5a5;
    margin-top: 10px;
    margin-right: 30px;
}
/* 把li 的父亲ul 修改的足够宽一行能装开5个盒子就不会换行了 */
.box-bd ul {
    width: 1225px;
}
.box-bd ul li {
    position: relative;
    top: 0;
    float: left;
    width: 228px;
    height: 270px;
    background-color: #fff;
    margin-right: 15px;
    margin-bottom: 15px;
    transition: all .3s;
   
}
.box-bd ul li a {
    display: block;
}
.box-bd ul li:hover {
    top: -8px;
    box-shadow: 0 15px 30px rgb(0 0 0 / 10%);
}
.box-bd ul li img {
    width: 100%;
}
.box-bd ul li h4 {
    margin: 20px 20px 20px 25px;
    font-size: 14px;
    color: #050505;
    font-weight: 400;
}
.box-bd .info {
    margin: 0 20px 0 25px;
    font-size: 12px;
    color: #999;
}
.box-bd .info span {
    color: #ff7c2d;
}

拓展:术语解释

术语解释举例
关键字在JavaScript中具有特殊意义的词汇let var function if else switch case break
保留字在目前的JavaScript中没有意义,但未来可能具有特殊意义的词汇int short long char
表达式能产生值的代码,一般配合运算符出现10+3 age>=18
标识符变量名 函数名的另一种叫法
语句一段可执行的代码if() for()

拓展-基本数据类型和引用数据类型

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型

  • 值类型:简单数据类型/基本数据类型,在存储变量中存储的是值本身,因此叫做值类型

string,number,boolean,undefined,null

  • 引用数据类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型

通过new关键字创建的对象(系统对象/自定义对象),如Object,Array.Data等

堆栈空间分配区别:

  1. 栈(操作系统):由操作系统自动分配释放存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈,简单数据类型存放到栈里面
  2. 堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收,引用数据类型存放到堆里面.

Web API基本认知

变量声明有三个 var let和const,尽量使用const:

  • const语义化更好
  • 很多变量声明的时候就知道他不会被更改
  • 实际开发中,比如:react框架,基本const

建议:有了变量先给const,如果发现他后面是要被修改的,再改为let

基本数据类型数据改变不可以将let改为const,但复杂数据类型改变之后可以将let改为const

因为复杂数据类型(数组 对象等),在栈中存储地址,在堆中存储内容,const指向的数组在栈中的地址不变,只是改变了内容,故const可以修饰要改变的复杂数据类型,但简单数据类型就不可改变.

    const arr=['red','pink']
    arr.push('blue')
    // console.log(arr)//正确
    arr=[1,2,3,4]
    console.log(arr)//错误,地址已经改变,对象同理

作用和分类

作用:就是使用JS去操作html和浏览器

分类:DOM(W文档对象模型) BOM(浏览器对象模型)

DOM

  • DOM(Document Object Model---文档对象模型)是用来呈现以及与任意HTML或XML文档交互的API
  • 白话文:DOM是浏览器提供的一套专门用来操作网页内容的功能
  • DOM作用:开发网页内容特效和实现用户交互

DOM树

  • 将HTML文档以树状结构直观的表现出来,我们称之为文档树或DOM树
  • 描述网页内容关系的名词
  • 作用:文档树直观的体现了标签与标签之间的关系

 DOM对象

  • 浏览器根据html标签生成的JS对象
  • 所有标签属性都可以在这个对象上面找到
  • 修改这个对象的属性会自动映射到标签身上
    • div在html中是标签,在JS中是对象

DOM的核心思想

把网页内容当作对象来处理

document对象

  • 是DOM里提供的一个对象
  • 所以它提供的属性和方法都是用来访问和操作网页内容的,例如:document.write()
  • 网页中所有内容都在document里面

获取DOM元素

查找元素DOM元素就是利用JS选择页面中标签元素

根据CSS选择器来获取DOM元素

1. 选择匹配的第一个元素

语法:

 document.querySelector('CSS选择器')//查询选择器

参数

包含一个或多个CSS有效的选择器 字符串

返回值:

CSS选择器匹配的第一个元素,一个HTMLElement对象

如果没有匹配到,则返回null

可通过其改变某些样式:

    const nav=document.querySelector('#nav')
    nav.style.color='red'

2.选择匹配的多个元素

语法:

document.querySelectorAll('CSS选择器')

参数:包含一个或多个有效的CSS选择器 字符串

返回值:CSS匹配的NodeList 对象集合

不可以直接修改,只能通过遍历的方式一次给里面的元素作修改

得到的是一个伪数组:

  • 有长度有索引号的数组
  • 但是没有pop() push()等数组方法

想要得到里面的每一个对象,则需要遍历(for)的方式获得

控制台输出依次输出DOM对象

    const lis=document.querySelectorAll('ul li')
    for(let i=0;i<lis.length;i++){
      console.log(lis[i])
    }

操作元素内容

  • DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象
  • 就是操作对象使用的点语法
  • 如果想要修改标签元素里面的内容,则可以使用以下几种方式:

1.对象.innerText属性

  • 将文本内容添加/更新到任意标签位置
  • 显示纯文本,不解析标签

2.对象.innerHTML属性

  • 将文本内容添加/更新到任意标签位置
  • 会解析标签,多标签建议使用模板字符

年会抽奖案例

<!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 {
      width: 840px;
      height: 420px;
      background: url(./images/bg01.jpg) no-repeat center / cover;
      padding: 100px 250px;
      box-sizing: border-box;
    }
  </style>
</head>

<body>
  <div class="wrapper">
    <strong>传智教育年会抽奖</strong>
    <h1>一等奖:<span id="one">???</span></h1>
    <h3>二等奖:<span id="two">???</span></h3>
    <h5>三等奖:<span id="three">???</span></h5>
  </div>
  <script>
    // 1.声明数组
    const personArr=['周杰伦','刘德华','周星驰','张学友']
    // /2,先做一等奖
    // 2.1随机数
    const random=Math.floor(Math.random()*personArr.length)
    // 2.2获取one元素
    const one =document.querySelector('#one')
    // 2.3把名字给one
    one.innerHTML=personArr[random]
    // 2.4删除数组这个名字
    personArr.splice(random,1)


    // 二等奖
    const random2=Math.floor(Math.random()*personArr.length)
    // 2.2获取one元素
    const two =document.querySelector('#two')
    // 2.3把名字给two
    two.innerHTML=personArr[random2]
    // 2.4删除数组这个名字
    personArr.splice(random2,1)


    // 三等奖
    const random3=Math.floor(Math.random()*personArr.length)
    // 2.2获取one元素
    const three =document.querySelector('#three')
    // 2.3把名字给three
    three.innerHTML=personArr[random3]
    // 2.4删除数组这个名字
    personArr.splice(random3,1)

    console.log(personArr)
  </script>
</body>

</html>

操作元素的属性

操作元素常用属性

  • 还可以通过JS设置/修改标签元素属性,比如通过src更换图片
  • 最常见的属性比如:href,title,src等
  • 语法:对象.属性=值
<body>
  <img src="./images/1.webp" alt="">
  <script>
    // 1.获取图片元素
    const img=document.querySelector('img')
    // 2.修改图片对象的属性 对象.属性
    img.src=-'./images/2.webp'
    img.title='刘德华'
  </script>
</body>

页面刷新,图片随机切换案例

需求:当我们刷新页面时,页面中的图片随机显示不同的照片

<!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>
<body>
  <img src="./images/1.webp" alt="">
  <script>
    // 取N-M之间的随机整数
    function getRandom(N,M){
      return Math.floor(Math.random()*(M-N+1))+N
    }
    // 1.获取图片对象
    const img=document.querySelector('img')
    // 2.随机得到序号
    const random=getRandom(1,6)
    // 3.更换路径
    img.src=`./images/${random}.webp`
  </script>
</body>
</html>

操作元素样式属性

  • 还可以通过JS设置/修改标签元素的样式属性
  • 比如通过轮播图小圆点自动更换颜色样式
  • 点击按钮可以滚动图片,这是移动的图片的位置left等等

通过style属性操作CSS

  • DOM对象中的style属性可控制标签style行内样式,操作css属性需遵循驼峰命名
  • 修改样式比较少的情况下有优势
  • 生成的是行内样式表,权重比较高
<!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>
    div {
      width: 200px;
      height: 200px;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box"></div>
  <script>
    // 1.获取元素
    const box=document.querySelector('.box')
    // 2.修改样式属性 对象.style.样式属性='值'
    box.style.width='300px'
    // 多组单词的采取小驼峰命名法
    box.style.backgroundColor='hotpink'
    box.style.border='5px solid blue'
    box.style.borderTop='5px solid red'
  </script>
</body>
</html>

页面刷新,页面随机更换背景图片

需求:当刷新页面时,页面中的背景图片随机显示不同的图片

<!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>
    body {
      background: url(./images/desktop_1.jpg) no-repeat top center/cover;
    }
  </style>
</head>
<body>
  <script>
    function getRandom(N,M){
      return Math.floor(Math.random()*(M-N+1))+N
    }
    //随机数
    const random=getRandom(1,10)
    const body=document.querySelector('body')
    // document.body.style.backgroundImage=`url(./images/desktop_${random}.jpg)`//也可不用先获取对象,直接向页面中输出即可
    body.style.backgroundImage=`url(./images/desktop_${random}.jpg)`
  </script>
</body>
</html>

操作类名(className)操作CSS

如果修改的样式比较多,直接通过style属性修改比较繁琐,这时就可以通过css类名的形式

语法

div.className='box'

注意

  • 由于class是关键字,所以使用className去代替
  • className是使用新值换旧值,如果需要一个添加类,需要保留之前的类名
<!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>
    div {
      width: 200px;
      height: 200px;
      background-color: pink;
    }
    .box {
      width: 300px;
      height: 300px;
      background-color: skyblue;
      margin: 100px auto;
      padding: 10px;
      border: 1px solid #000;
    }
    .nav {
      background-color:red;
    }
  </style>
</head>
<body>
  <div class="nav"></div>
  <script>
    //1.获取元素
    const div=document.querySelector('div')
    //2.添加类名
    div.className='box'//会覆盖掉之前的类名
    div.className='nav box'//保留之前的类名
  </script>
</body>
</html>

通过classList操作类控制CSS

为了解决className容易覆盖以前的类名,可以通过classList方式追加和删除类名

<!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>
    .box {
      width: 200px;
      height: 200px;
      color: #333;;
    }
    .active {
      color: red;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box">文字</div>
  <script>
    // 通过classList添加
    //1.获取元素
    const box=document.querySelector('.box')
    // 2.修改样式 add()类名不加点,并且是字符串
    //2.1追加类
    box.classList.add('active')
    // 2.2删除类 remove()
    box.classList.remove('box')
    // 2.3切换类 toggle() 若有该属性就删掉,若没有就加上
    box.classList.toggle('active')
  </script>
</body>
</html>

使用className和classList的区别

  • 修改大量样式更方便
  • 修改不多样式的时候方便
  • classList是追加和删除不影响以前类名

轮播图随机版

当我们刷新页面,页面中的轮播图会显示不同图片以及样式

分析:

  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>轮播图点击切换</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></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 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)' },
    ]
    // //取到N-M的随机整数
    // function getRandom(N,M){
    //   return Math.floor(Math.random()*(M-N+1))+N
    // }
    // //1.需要一个随机数
    // const random=getRandom()
    // 也可直接取值之后用取整函数
    const random=parseInt(Math.random()*sliderData.length)
    // console.log(sliderData[random])
    // 2.把对应的数据渲染到标签里面
    //2.1获取图片
    const img=document.querySelector('.slider-wrapper img')
    // 2.2修改图片路径
    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.修改背景颜色
    const footer=document.querySelector('.slider-footer')
    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>

操作表单元素属性

  • 表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框
  • 正常的有属性有取值的 跟其他的标签属性没有任何区别

获取:DOM对象,属性名

设置:DOM对象.属性名=新值

    表单.value='用户名'
    表单.type='password'
  •  表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示,如果为true代表添加了该属性 如果是flase代表移除了该属性
  • 比如:disdabled、checked、selected

自定义属性

标准属性:

标签天生自带的属性 比如:class id title等,可以直接使用点语法操作比如:disabled checked selected

自定义属性:

  • 在html5中推出来的专门的data-自定义属性
  • 在标签上一律以data开头
  • 在DOM对象上一律以dataset对象方式获取
    const one=document.querySelector('div')//只获取第一个div盒子
    console.log(one.dataset.id)//1
    console.log(one.dataset.spm)//know

定时器-间歇函数

  • 网页中经常需要一种功能:每隔一段时间需要自动执行一段代码,不需要手动触发
  • 例如:网页中的倒计时
  • 要实现这种需求,需要定时器函数

定时器函数可以开启和关闭定时器

1.开启定时器

setInterval(函数,间隔时间)

作用:每隔一段时间调用这个函数

间隔时间单位是毫秒

注意:

  • 1.函数名字不需要加括号
  • 2.定时器返回的是一个id数字(每个定时器的符号都是独一无二的)
    // setInterval(函数,间隔时间)
    // setInterval(function(){
    //   document.write('一秒执行一次')
    // },1000)
    function fn(){
      console.log('一秒执行一次')
    }
    // setInterval(fn,1000)
    setInterval('fn()',1000)//经过1000ms之后才开始调用

2.关闭定时器

    let 变量名=setInterval(函数,间隔时间)
    clearInterval(变量名)

阅读注册协议

需求:按钮60s之后才可以使用

分析:

  1. 开始先把按钮禁用(disabled属性)
  2. 一定要获取元素
  3. 函数内处理逻辑:
  1. 秒数开始减减:
  2. 按钮里的文字跟着一起变化
  3. 如果秒数等于0 停止定时器,里面的文字变为同意,最后,按钮可以点击

 

<!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>
    textarea{
      display: block;
      margin-bottom: 10px;
    }
  </style>
</head>
<body>
  <textarea name="" id="" cols="30" rows="10">
    用户注册协议
    欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的的形式在线签署以下协议,请您务必仔细阅读,充分理解协议中的条款内容后再点击同意,【请您注意】如果您不同意以下协议全部或者任何条款约定,请您停止注册,您
  </textarea>
  <button class="btn" disabled>我已经阅读用户协议(5)</button>
  <script>
    // 1.获取元素
    const btn=document.querySelector('.btn')
    console.log(btn.innerHTML)//button是双标签,比较特殊,需要用innerHTML获得里面的文字内容
    let i=5
    let n=setInterval(function(){//记得要用变量接收
      i--
      btn.innerHTML=`我已经阅读用户协议(${i})`
      if(i===0){
        clearInterval(n)//关闭定时器
        //定时器关闭之后就可以点开按钮
        btn.disabled=false
        btn.innerHTML='同意'
      }
    },1000)
  </script>
</body>
</html>

轮播图定时器版

需求:每隔一秒钟切换一个图片

分析:

1.准备一个数组对象,里面包含详细信息

2.获取元素

3.设置定时器函数

  •         设置一个变量++
  •         找到变量对应的对象
  •         更改图片 文字信息
  •         激活小圆点:移除上一个高亮的类名,当前变量对应的小圆点添加类

4.处理图片自动复原从头播放(放到变量++后面,紧挨)

  •         如果图片播放到最后一张,就是大于数组的长度
  •         则把变量重置为0
<!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 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')
    let i=0
    // 开始定时器
    setInterval(function(){
      i++
      //无缝衔接位置
      console.log(i)
      if(i>=sliderData.length){
        i=0;
      }
      //console.log(sliderData[i])
      // 更换图片路径
      img.src=sliderData[i].url
      // 把字写到p里面
      p.innerHTML=sliderData[i].title
      // 小圆点
      //先删除以前的active、
      document.querySelector('.slider-indicator .active').classList.remove('active')
      //只让当前的li添加active
      document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')
    },1000)

  </script>
</body>

</html>

事件监听(绑定)

事件:是在编程时系统内发生的动作或者发生的动作,比如用户在网页上单击一个按钮

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

语法:

元素对象.addEventListener('事件类型',要执行的函数)

事件监听三要素:

事件源:哪个dom元素被事件触发了,要获取dom元素

事件类型:用什么方式触发,比如单击click,鼠标经过mouseover等

事件调用的函数:要做什么事

<!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>
<body>
  <button>按钮</button>
  <script>
    // 元素对象.addEventListener('事件类型',要执行的对象)
    const btn=document.querySelector('.btn')
    //修改元素样式
    btn.addEventListener('click',function(){
      alert('点击了~')
    })
  </script>
</body>
</html>

注意:

  • 1.事件类型要加引号
  • 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>
</head>
<body>
  <button>按钮</button>
  <script>
    //需求:点击了按钮,弹出一个对话框
    //1.事件源 按钮
    //2. 事件类型 点击鼠标
    //3. 事件处理程序 弹出对话框
    const btn=document.querySelector('button')
    btn.addEventListener('click',function(){
      alert('你好呀')
    })
  </script>
</body>
</html>

 点击关闭广告

<!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>
    .box {
      position: relative;
      width: 1000px;
      height: 200px;
      background-color: antiquewhite;
      margin: 100px auto;
      text-align: center;
      font-size: 50px;
      line-height: 200px;
      font-weight: 700;
    }
    .close {
      position: absolute;
      right: 20px;
      top:10px;
      width: 20px;
      height: 20px;
      line-height: 20px;
      font-size: 16px;
      text-align: center;
      border: 1px solid pink;
      border-radius: 50%;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="box">
    <h1>我是广告</h1>
    <div class="close">X</div>
  </div>
  <script>
    //1.获取事件源
    const close=document.querySelector('.close')
    //关闭的是大盒子
    const box=document.querySelector('.box')
    //2.事件侦听
    box.addEventListener('click',function(){
      box.style.display='none'
    })
  </script>
</body>
</html>

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

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

相关文章

数学建模之MATLAB使用

1.数值计算和符号计算的认识 我们都知道MATLAB里面存在着数值计算和符号计算&#xff0c;但是两者之间到底是怎样的呢&#xff1f; 举一个很简单的例子&#xff0c;我们在高等数学里面的微积分学习时经常求不定积分&#xff0c;也就是原函数&#xff0c;这个过程实际上进行的…

搭建hive环境,并解决后启动hive命令报 hive: command not found的问题

一、问题解决 1、问题复现 2、解决问题 查阅资料得知该问题大部分是环境变量配置出了问题&#xff0c;我就输入以下命令进入配置文件检查自己的环境变量配置&#xff1a; [rootnode03 ~]# vi /etc/profile 检查发现自己的hive配置没有问题 &#xff0c;于是我就退出&#xf…

Eclipse新建java类的操作流程

一、在左侧空白区域&#xff0c;点击鼠标右键。 二、点击new&#xff0c;选择Java Project &#xff08;由于这里不知道怎么截图&#xff0c;就用手机拍了一张&#xff0c;希望不要介意&#xff09; 三、 给project文件起个名字&#xff0c;其他都不用管&#xff0c;点击Finis…

HTML(一)---【基础】

零.前言&#xff1a; 本文章对于HTML的基础知识处理的十分细节&#xff0c;适合从头学习的初学者&#xff0c;亦或是想要提升基础的前端工程师。 1.什么是HTML&#xff1f; HTML是&#xff1a;“超文本标签语言”&#xff08;Hyper Text Markup Language&#xff09; HTML不…

MySQL学习笔记|基础(一)|MySQL概述、Mac OS M2芯片Mysql的安装和配置、MySQL数据库数据模型

文章目录 概念安装和配置安装报错 MySQL的启停和状态的查看MySQL数据库数据模型 概念 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操纵关系型数据库的编程…

基于nodejs+vue在线政务服务中心python-flask-django-php

最后要对系统进行测试&#xff0c;还要对测试的结果进行总结和分析&#xff0c;为以后系统的维护提供方便&#xff0c;也为以后类似系统的开发提供参考和帮助。这种个性化的网络系统管理更重视相互协调和管理合作,能激发管理者的创造性和主动性,这对在线政务服务中心管理系统来…

第三十一天-Flask-ORM-sqlalchemy

目录 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 ​编辑 4.插入修改删除 5.查询 1.什么是ORM 2.flask-sqlalchemy 1安装 2.配置 3.数据库模型设计 4.插入修改删除 5.查询

python基础语法--快速入门

目录 一、字面量1.1定义 二、关键字三、注释四、引号五、输入输出六、缩进七、数据类型转换八、标识符九、运算符 一、字面量 1.1定义 字面量&#xff1a;在代码中&#xff0c;被写下来的固定的值。 python中哪些值可以被写下来&#xff0c;如何在代码中写他们呢&#xff1f;…

【GameFramework框架内置模块】19、Web请求(Web Request)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a;…

web端复制文本

安装clipboard npm install clipboard --save 实现代码 import Clipboard from clipboard; copy() {var clipboard new Clipboard(.copybox)clipboard.on(success, e > {// console.log(复制成功,e)this.$message.success(复制成功)// 释放内存clipboard.destroy()})cli…

多层感知机-----自我神经MLP入门笔记

多层感知机&#xff08;Multilayer Perceptron, MLP&#xff09;是一种常见的人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;模型&#xff0c;它由多个人工神经元组成的多层结构。每个神经元都与前一层的所有神经元连接&#xff0c;并且每条连接都有一个…

在django中使用kindeditor出现转圈问题

在django中使用kindeditor出现转圈问题 【一】基础检查 【1】前端检查 确保修改了uploadJson的默认地址 该地址需要在路由层有映射关系 确认有加载官方文件 kindeditor-all-min.js确保有传递csrfmiddlewaretoken 或者后端关闭了csrf验证 <textarea name"content&qu…

2014年认证杯SPSSPRO杯数学建模A题(第一阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现&#xff1a; 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要&#xff0c;轮胎表面常会加工出不同形状的花纹。在设计轮胎时&#xff0c;往往要针对其使用环境&#xff0c;设计出相应的花纹形状。   第一阶段问…

学习Dive into Deep learning:2.1数据操作,张量(tensor)

首先&#xff0c;我们介绍n维数组&#xff0c;也称为张量&#xff08;tensor&#xff09;。 使用过Python中NumPy计算包的读者会对本部分很熟悉。 无论使用哪个深度学习框架&#xff0c;它的张量类&#xff08;在MXNet中为ndarray&#xff0c; 在PyTorch和TensorFlow中为Tensor…

AI时代-普通人的AI绘画工具对比(Midjouney与Stable Diffusion)

AI时代-普通人的AI绘画工具对比&#xff08;Midjouney与Stable Diffusion&#xff09; 前言1、基础对比Stable Diffusion&#xff08;SD&#xff09;SD界面安装与使用SD Midjouney&#xff08;MJ&#xff09; 2、硬件与运行要求对比Stable Diffusion硬件要求内存硬盘显卡 Midjo…

困难重重!如何将超导量子计算机完好无损地搬进数据中心

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨浪味仙 沛贤 深度好文&#xff1a;3700字丨18分钟阅读 如何把超导量子计算机部署到数据中心&#xff1f;数据中心运营商和量子公司面临着以前没有见过的重重难关。 首…

Hana数据库 No columns were bound prior to calling SQLFetch or SQLFetchScroll

在php调用hana数据库的一个sql时报错了&#xff0c;查表结构的sql&#xff1a; select * from sys.table_columns where table_name VBAP SQLSTATE[SL009]: <<Unknown error>>: 0 [unixODBC][Driver Manager]No columns were bound prior to calling SQLFetch …

基于nodejs+vue基于协同过滤算法的私人诊python-flask-django-php

实现后的私人诊所管理系统基于用户需求分析搭建的&#xff0c;并且会有个人中心&#xff0c;患者管理&#xff0c;医生管理&#xff0c;科室管理&#xff0c;出诊医生管理&#xff0c;预约挂号管理&#xff0c;预约取消管理&#xff0c;病历信息管理&#xff0c;药品信息管理&a…

汽车后视镜反射率检测光纤光谱仪:安全驾驶的守护神

在汽车的日常使用中&#xff0c;后视镜扮演着至关重要的角色。它不仅帮助驾驶员观察车辆后方的情况&#xff0c;还确保了行车的安全性。然而&#xff0c;由于各种原因&#xff0c;后视镜的反射率可能会降低&#xff0c;从而影响到驾驶员的视线范围和判断能力。为了解决这一问题…

javaWeb教务查询系统

一、简介 在教育管理领域&#xff0c;教务管理系统是一个至关重要的工具&#xff0c;它能够有效地协调学校、教师和学生之间的各种活动。我设计了一个基于JavaWeb的教务管理系统&#xff0c;该系统包括三个角色&#xff1a;管理员、教师和学生。管理员拥有课程管理、学生管理、…