• js写轮播图,逐步完善


    目录

    1、自动轮播

    2、点击更换

     3、自动播放加左右箭头点击切换

    4、完整版轮播图


    1、自动轮播

    用定时器setInterval()来写,可以实现自动播放

    1. 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. //获取元素
    117. const img = document.querySelector('.slider-wrapper img')
    118. const p = document.querySelector(".slider-footer p")
    119. const footer = document.querySelector('.slider-footer')
    120. const slider = document.querySelector(".slider")
    121. const lis = document.querySelectorAll('.slider-indicator li')
    122. const next = document.querySelector('.toggle .next')
    123. const prev = document.querySelector('.toggle .prev')
    124. let i = 0
    125. //开启定时器
    126. let timer = setInterval(function () {
    127. i++
    128. if (i === sliderData.length) {
    129. i = 0
    130. }
    131. // 设置图片
    132. img.src = sliderData[i].url
    133. // 设置标题
    134. p.innerHTML = sliderData[i].title
    135. // 设置底部区域背景色
    136. footer.style.backgroundColor = sliderData[i].color
    137. // 设置小圆圈样式
    138. // 把其他某个li的active移除 再给对应的li设置
    139. document.querySelector('.slider-indicator .active').classList.remove('active')
    140. lis[i].classList.add('active')
    141. }, 1000)
    142. script>
    143. body>
    144. html>

    2、点击更换

    点击那个小圆点就跳到对应位置

    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. //获取元素
    117. const img = document.querySelector('.slider-wrapper img')
    118. const p = document.querySelector(".slider-footer p")
    119. const footer = document.querySelector('.slider-footer')
    120. const slider = document.querySelector(".slider")
    121. const lis = document.querySelectorAll('.slider-indicator li')
    122. const next = document.querySelector('.toggle .next')
    123. const prev = document.querySelector('.toggle .prev')
    124. //遍历所有的li,给每个li绑定一个点击事件
    125. for(let i=0;ilength;i++){
    126. lis[i].addEventListener('click',function() {
    127. //移出所有的active类
    128. document.querySelector('.slider-indicator .active').classList.remove('active')
    129. //谁点击谁添加active类
    130. this.classList.add('active')
    131. img.src = sliderData[i].url
    132. p.innerHTML = sliderData[i].title
    133. footer.style.backgroundColor = sliderData[i].color
    134. })
    135. }
    136. script>
    137. body>
    138. html>

     3、自动播放加左右箭头点击切换

    需求:要自动播放

            点击左右按钮可以跳转

            鼠标移入停止自动播放,鼠标离开继续自动播放

    思路:

            需要开启定时器来实现自动播放

            给左右按钮添加点击事件

            给整体添加鼠标移入清除定时器功能

            鼠标移出添加开启定时器功能  

    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. const img = document.querySelector('.slider-wrapper img')
    117. const p = document.querySelector(".slider-footer p")
    118. const footer = document.querySelector('.slider-footer')
    119. const slider = document.querySelector(".slider")
    120. const lis = document.querySelectorAll('.slider-indicator li')
    121. const next = document.querySelector('.toggle .next')
    122. const prev = document.querySelector('.toggle .prev')
    123. let i = 0
    124. //开启定时器
    125. let timer = setInterval(function () {
    126. i++
    127. if (i === sliderData.length) {
    128. i = 0
    129. }
    130. img.src = sliderData[i].url
    131. p.innerHTML = sliderData[i].title
    132. footer.style.backgroundColor = sliderData[i].color
    133. document.querySelector('.slider-indicator .active').classList.remove('active')
    134. lis[i].classList.add('active')
    135. }, 1000)
    136. next.addEventListener('click', function () {
    137. i++
    138. if (i === sliderData.length) {
    139. i = 0
    140. }
    141. img.src = sliderData[i].url
    142. p.innerHTML = sliderData[i].title
    143. footer.style.backgroundColor = sliderData[i].color
    144. document.querySelector('.slider-indicator .active').classList.remove('active')
    145. lis[i].classList.add('active')
    146. })
    147. prev.addEventListener('click',function() {
    148. i--
    149. if (i< 0) {
    150. i = sliderData.length
    151. }
    152. img.src = sliderData[i].url
    153. p.innerHTML = sliderData[i].title
    154. footer.style.backgroundColor = sliderData[i].color
    155. document.querySelector('.slider-indicator .active').classList.remove('active')
    156. lis[i].classList.add('active')
    157. })
    158. slider.addEventListener('mouseenter', function () {
    159. clearInterval(timer)
    160. })
    161. slider.addEventListener('mouseleave', function () {
    162. timer = setInterval(function () {
    163. i++
    164. if (i === sliderData.length) {
    165. i = 0
    166. }
    167. img.src = sliderData[i].url
    168. p.innerHTML = sliderData[i].title
    169. footer.style.backgroundColor = sliderData[i].color
    170. document.querySelector('.slider-indicator .active').classList.remove('active')
    171. lis[i].classList.add('active')
    172. }, 1000)
    173. })
    174. script>
    175. body>
    176. html>

    优化代码:把重复的代码封装成一个为toggle() 的函数,哪里需要,哪里调用,减少代码冗余

    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. {
    108. url: './images/slider01.jpg',
    109. title: '对人类来说会不会太超前了?',
    110. color: 'rgb(100, 67, 68)',
    111. },
    112. {
    113. url: './images/slider02.jpg',
    114. title: '开启剑与雪的黑暗传说!',
    115. color: 'rgb(43, 35, 26)',
    116. },
    117. {
    118. url: './images/slider03.jpg',
    119. title: '真正的jo厨出现了!',
    120. color: 'rgb(36, 31, 33)',
    121. },
    122. {
    123. url: './images/slider04.jpg',
    124. title: '李玉刚:让世界通过B站看到东方大国文化',
    125. color: 'rgb(139, 98, 66)',
    126. },
    127. {
    128. url: './images/slider05.jpg',
    129. title: '快来分享你的寒假日常吧~',
    130. color: 'rgb(67, 90, 92)',
    131. },
    132. {
    133. url: './images/slider06.jpg',
    134. title: '哔哩哔哩小年YEAH',
    135. color: 'rgb(166, 131, 143)',
    136. },
    137. {
    138. url: './images/slider07.jpg',
    139. title: '一站式解决你的电脑配置问题!!!',
    140. color: 'rgb(53, 29, 25)',
    141. },
    142. {
    143. url: './images/slider08.jpg',
    144. title: '谁不想和小猫咪贴贴呢!',
    145. color: 'rgb(99, 72, 114)',
    146. },
    147. ]
    148. // 找到相关元素
    149. const oImg = document.querySelector('.slider-wrapper > img')
    150. const title = document.querySelector('.slider-footer > p')
    151. const sliderFooter = document.querySelector('.slider-footer')
    152. const lis = document.querySelectorAll('.slider-indicator li')
    153. const prev = document.querySelector('.prev')
    154. const next = document.querySelector('.next')
    155. const slider = document.querySelector('.slider')
    156. // 定义一个变量
    157. let i = 0
    158. // 开启定时器 开启自动播放
    159. let timerId = setInterval(function() {
    160. // i++
    161. // if (i === sliderData.length) {
    162. // i = 0
    163. // }
    164. // toggle()
    165. // 方式二 模拟点击右侧按钮
    166. next.click()
    167. }
    168. , 1500)
    169. // 给右侧按钮绑定事件
    170. next.addEventListener('click', function () {
    171. i++
    172. if (i === sliderData.length) {
    173. i = 0
    174. }
    175. toggle()
    176. })
    177. // 给左侧按钮绑定事件
    178. prev.addEventListener('click', function () {
    179. i--
    180. if (i < 0) {
    181. i = sliderData.length - 1
    182. }
    183. toggle()
    184. })
    185. // 给slider绑定鼠标移入事件
    186. slider.addEventListener('mouseenter', function () {
    187. clearInterval(timerId)
    188. })
    189. // 给slider绑定鼠标移出事件
    190. slider.addEventListener('mouseleave', function () {
    191. timerId = setInterval(function () {
    192. next.click()
    193. }, 1500)
    194. })
    195. // 切换
    196. function toggle() {
    197. // 设置图片
    198. oImg.src = sliderData[i].url
    199. // 设置标题
    200. title.innerHTML = sliderData[i].title
    201. // 设置底部区域背景色
    202. sliderFooter.style.backgroundColor = sliderData[i].color
    203. // 设置小圆圈样式
    204. // 把其他某个li的active移除 再给对应的li设置
    205. document
    206. .querySelector('.slider-indicator .active').classList.remove('active')
    207. // lis[i].classList.add('active') 方式二
    208. document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')
    209. }
    210. script>
    211. body>
    212. html>

    4、完整版轮播图

    结合以上所有功能,是一个综合

    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. const img = document.querySelector('.slider-wrapper img')
    117. const p = document.querySelector(".slider-footer p")
    118. const footer = document.querySelector('.slider-footer')
    119. const slider = document.querySelector(".slider")
    120. const lis = document.querySelectorAll('.slider-indicator li')
    121. const next = document.querySelector('.toggle .next')
    122. const prev = document.querySelector('.toggle .prev')
    123. let i = 0
    124. //开启定时器
    125. let timer = setInterval(function () {
    126. next.click()
    127. }, 1000)
    128. //右侧点击
    129. next.addEventListener('click', function () {
    130. i++
    131. if (i === sliderData.length) {
    132. i = 0
    133. }
    134. toggle()
    135. })
    136. //左侧点击
    137. prev.addEventListener('click', function () {
    138. i--
    139. if (i < 0) {
    140. i = sliderData.length
    141. }
    142. toggle()
    143. })
    144. //鼠标移入清除定时器
    145. slider.addEventListener('mouseenter', function () {
    146. clearInterval(timer)
    147. })
    148. //鼠标移出,开启定时器
    149. slider.addEventListener('mouseleave', function () {
    150. timer = setInterval(function () {
    151. next.click()
    152. }, 1000)
    153. })
    154. //给每个li(小圆点)设置点击事件
    155. for (let j = 0; j < lis.length; j++) {
    156. lis[j].addEventListener('click', function () {
    157. document.querySelector('.slider-indicator .active').classList.remove('active')
    158. this.classList.add('active')
    159. img.src = sliderData[j].url
    160. p.innerHTML = sliderData[j].title
    161. footer.style.backgroundColor = sliderData[j].color
    162. i = j
    163. })
    164. }
    165. //相同代码封装成一个函数,方便复用
    166. function toggle() {
    167. img.src = sliderData[i].url
    168. p.innerHTML = sliderData[i].title
    169. footer.style.backgroundColor = sliderData[i].color
    170. document.querySelector('.slider-indicator .active').classList.remove('active')
    171. lis[i].classList.add('active')
    172. }
    173. script>
    174. body>
    175. html>

     

  • 相关阅读:
    spring-aop源码分析(2)_AnnotationAwareAspectJAutoProxyCreator后置处理器
    桥接模式简介
    Python数据分析与可视化期末简答题复习
    springcloudalibaba架构(17):Gateway网关限流
    ttkefu客服系统的优势及应用领域
    “2024杭州智慧城市及安防展会”将于4月在杭州博览中心盛大召开
    2.3.1 交换机的链路聚合技术
    关于计算机丢失MSVCP140.dll是什么意思?MSVCP140.dll缺失的5个解决方案分享
    计算机网络初识
    DVWA环境的配置
  • 原文地址:https://blog.csdn.net/m0_56713342/article/details/134405555