• Web APIS——第一天(下)


    一、随机轮播图案例

    1. DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    7. <title>轮播图点击切换title>
    8. <style>
    9. * {
    10. box-sizing: border-box;
    11. }
    12. .slider {
    13. width: 560px;
    14. height: 400px;
    15. overflow: hidden;
    16. }
    17. .slider-wrapper {
    18. width: 100%;
    19. height: 320px;
    20. }
    21. .slider-wrapper img {
    22. width: 100%;
    23. height: 100%;
    24. display: block;
    25. }
    26. .slider-footer {
    27. height: 80px;
    28. background-color: rgb(100, 67, 68);
    29. padding: 12px 12px 0 12px;
    30. position: relative;
    31. }
    32. .slider-footer .toggle {
    33. position: absolute;
    34. right: 0;
    35. top: 12px;
    36. display: flex;
    37. }
    38. .slider-footer .toggle button {
    39. margin-right: 12px;
    40. width: 28px;
    41. height: 28px;
    42. appearance: none;
    43. border: none;
    44. background: rgba(255, 255, 255, 0.1);
    45. color: #fff;
    46. border-radius: 4px;
    47. cursor: pointer;
    48. }
    49. .slider-footer .toggle button:hover {
    50. background: rgba(255, 255, 255, 0.2);
    51. }
    52. .slider-footer p {
    53. margin: 0;
    54. color: #fff;
    55. font-size: 18px;
    56. margin-bottom: 10px;
    57. }
    58. .slider-indicator {
    59. margin: 0;
    60. padding: 0;
    61. list-style: none;
    62. display: flex;
    63. align-items: center;
    64. }
    65. .slider-indicator li {
    66. width: 8px;
    67. height: 8px;
    68. margin: 4px;
    69. border-radius: 50%;
    70. background: #fff;
    71. opacity: 0.4;
    72. cursor: pointer;
    73. }
    74. .slider-indicator li.active {
    75. width: 12px;
    76. height: 12px;
    77. opacity: 1;
    78. }
    79. style>
    80. head>
    81. <body>
    82. <div class="slider">
    83. <div class="slider-wrapper">
    84. <img src="./images/slider01.jpg" alt="" />
    85. div>
    86. <div class="slider-footer">
    87. <p>对人类来说会不会太超前了?p>
    88. <ul class="slider-indicator">
    89. <li>li>
    90. <li>li>
    91. <li>li>
    92. <li>li>
    93. <li>li>
    94. <li>li>
    95. <li>li>
    96. <li>li>
    97. ul>
    98. <div class="toggle">
    99. <button class="prev"><button>
    100. <button class="next">>button>
    101. div>
    102. div>
    103. div>
    104. <script>
    105. // 1. 初始数据
    106. const sliderData = [
    107. { url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
    108. { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
    109. { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
    110. { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
    111. { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
    112. { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
    113. { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
    114. { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
    115. ]
    116. // 1.需要一个随机数,数组的长度
    117. const random = parseInt(Math.random()*sliderData.length)
    118. // console.log(sliderData[random]);
    119. // 2. 把对应的数据渲染到标签里面
    120. // 2.1 获取图片
    121. const img = document.querySelector('.slider-wrapper img')
    122. // 2.2 修改图片路径 = 对象.url
    123. img.src = sliderData[random].url
    124. // 3.把p里面的文字内容更换
    125. // 3.1 获取p
    126. const p = document.querySelector('.slider-footer p')
    127. // 3.2 修改p
    128. p.innerHTML = sliderData[random].title
    129. // 4. 修改背景颜色
    130. const footer = document.querySelector('.slider-footer')
    131. footer.style.backgroundColor = sliderData[random].color
    132. // 5.小圆点
    133. const li = document.querySelector(`.slider-indicator li:nth-child(${random + 1})`)
    134. // console.log(li);
    135. // 让当前这个小li,添加active这个类
    136. li.classList.add('active')
    137. script>
    138. body>
    139. html>

    二、定时器-间歇函数

    2.1 定时器函数介绍

    网页中经常会需要一种功能:每隔一段时间需要自动执行一段代码,不需要我们手动去触发

    例如下这种倒计时类型的效果:

    2.2 定时器函数基本使用

    2.2.1 开启定时器

    setInterval(函数,间隔时间)

    作用:

    • 每隔一段时间调用这个函数
    • 间隔时间单位是毫秒

    注意:

    1. 函数名字不需要加括号
    2. 定时器返回的是一个id数字 
    3. 每个定时器都是独一无二的,有自己的编号

    2.2.2 关闭定时器

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

    clearInterval(变量名)

    注意:

    1. 函数名字不要加括号
    2. 定时器返回的是一个id数字
    3. 一般不会刚创建就停止,而是满足一定条件在停止

    2.2.3 练习

    阅读注册协议

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

    分析:

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

    三、综合案例

    轮播图定时器版

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

    分析:

    1. 准备一个数组对象,里面包含详细信息(素材包含)
    2. 获取元素
    3. 设置定时器函数
      1. 设置一个变量++
      2. 找到变量对应的对象
      3. 更改图片、文字信息
      4. 激活小圆点:移除上一个高亮的类名,当前变量对应的小圆点添加类
    4. 处理图片自动复原从头播放(放到变量++后面,紧挨)
      1. 如果图片播放到最后一张,就是大于等于数组的长度
      2. 则把变量重置为0
    1. DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    7. <title>轮播图点击切换title>
    8. <style>
    9. * {
    10. box-sizing: border-box;
    11. }
    12. .slider {
    13. width: 560px;
    14. height: 400px;
    15. overflow: hidden;
    16. }
    17. .slider-wrapper {
    18. width: 100%;
    19. height: 320px;
    20. }
    21. .slider-wrapper img {
    22. width: 100%;
    23. height: 100%;
    24. display: block;
    25. }
    26. .slider-footer {
    27. height: 80px;
    28. background-color: rgb(100, 67, 68);
    29. padding: 12px 12px 0 12px;
    30. position: relative;
    31. }
    32. .slider-footer .toggle {
    33. position: absolute;
    34. right: 0;
    35. top: 12px;
    36. display: flex;
    37. }
    38. .slider-footer .toggle button {
    39. margin-right: 12px;
    40. width: 28px;
    41. height: 28px;
    42. appearance: none;
    43. border: none;
    44. background: rgba(255, 255, 255, 0.1);
    45. color: #fff;
    46. border-radius: 4px;
    47. cursor: pointer;
    48. }
    49. .slider-footer .toggle button:hover {
    50. background: rgba(255, 255, 255, 0.2);
    51. }
    52. .slider-footer p {
    53. margin: 0;
    54. color: #fff;
    55. font-size: 18px;
    56. margin-bottom: 10px;
    57. }
    58. .slider-indicator {
    59. margin: 0;
    60. padding: 0;
    61. list-style: none;
    62. display: flex;
    63. align-items: center;
    64. }
    65. .slider-indicator li {
    66. width: 8px;
    67. height: 8px;
    68. margin: 4px;
    69. border-radius: 50%;
    70. background: #fff;
    71. opacity: 0.4;
    72. cursor: pointer;
    73. }
    74. .slider-indicator li.active {
    75. width: 12px;
    76. height: 12px;
    77. opacity: 1;
    78. }
    79. style>
    80. head>
    81. <body>
    82. <div class="slider">
    83. <div class="slider-wrapper">
    84. <img src="./images/slider01.jpg" alt="" />
    85. div>
    86. <div class="slider-footer">
    87. <p>对人类来说会不会太超前了?p>
    88. <ul class="slider-indicator">
    89. <li class="active">li>
    90. <li>li>
    91. <li>li>
    92. <li>li>
    93. <li>li>
    94. <li>li>
    95. <li>li>
    96. <li>li>
    97. ul>
    98. <div class="toggle">
    99. <button class="prev"><button>
    100. <button class="next">>button>
    101. div>
    102. div>
    103. div>
    104. <script>
    105. // 1. 初始数据
    106. const sliderData = [
    107. { url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },
    108. { url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },
    109. { url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },
    110. { url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },
    111. { url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },
    112. { url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },
    113. { url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },
    114. { url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },
    115. ]
    116. // 1. 获取元素
    117. const img = document.querySelector('.slider-wrapper img')
    118. const p = document.querySelector('.slider-footer p')
    119. let i = 0
    120. // 2. 开始定时器
    121. // console.log(sliderData[i]) 拿到对应的对象了
    122. setInterval(function(){
    123. i++
    124. console.log(i);
    125. // 无缝衔接位置
    126. if(i >= sliderData.length){
    127. i = 0
    128. }
    129. // console.log(sliderData[i]);
    130. // const obj = sliderData[i]
    131. // 更换图片路径
    132. img.src = sliderData[i].url
    133. // 把字写到p里面
    134. p.innerHTML = sliderData[i].title
    135. // 小圆点
    136. // 先删除以前的active
    137. document.querySelector('.slider-indicator .active').classList.remove('active')
    138. // 只让当前list添加active
    139. document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')
    140. },1000)
    141. script>
    142. body>
    143. html>

  • 相关阅读:
    Java项目使用自定义的公共单元(Maven管理)
    Flow公链 |FCL1.0正式上线
    openwrt上/etc/localtime报错问题解决
    字节序转换的问题详细讲解:将unsigned int val字节序逆转
    文档管理软件中真正重要的 10 件事
    LastPass 开发者系统被黑客窃取源代码
    多线程
    防火墙技术基础篇:认识安全策略、安全区域、域间转发及报文转发流程
    【GlobalMapper精品教程】013:矢量点图层的创建及数字化案例操作
    macOS 关闭系统更新以及相关提示
  • 原文地址:https://blog.csdn.net/weixin_48719464/article/details/133975676