博客列表 >仿写轮播图

仿写轮播图

飞天001
飞天001原创
2023年03月31日 17:25:17276浏览

按3月30日的课程,仿写轮播图.

  1. <div class="slideshow">
  2. <!-- 1. 图片 -->
  3. <div class="imgs"></div>
  4. <!-- 2. 按钮 -->
  5. <div class="btns"></div>
  6. </div>

html页面的js代码

  1. <script type="module">
  2. // 获取图片组的入口,即是图片元素
  3. const imgs = document.querySelector('.imgs')
  4. // 获取按钮组的入口,
  5. const btns = document.querySelector('.btns')
  6. // console.log(imgs,btns);
  7. /**
  8. * 当前轮播图至少需要4个函数
  9. * 1.创建图片组
  10. * 2.创建按钮组
  11. * 3.创建按钮事件:实现点击按钮,图片切换
  12. * 4.定时轮播器:间歇式轮播()
  13. */
  14. //导入轮播图模块slideshow.js
  15. import slide from './js/slideshow.js'
  16. //自动加载
  17. window.onload = function(){
  18. //1.创建图片组
  19. slide.createImg(imgs)
  20. //2.创建按钮组
  21. slide.createBtn(btns)
  22. //3. 创建按钮时间:实现图片切换
  23. // 因为要拿到索引,所以不适合用事件代理
  24. // 一个一个单独添加点击事件
  25. ;[...btns.children].forEach(function(btn){
  26. btn.onclick = function(){
  27. slide.switchImg(this,imgs)
  28. }
  29. })
  30. // 4.定时轮播器:间歇式轮播()
  31. // const btnsArr = [...btns.children]//声明按钮数组
  32. //Object.keys(): 返回一个对象中索引组成的数组(返回对象索引组成的数组)
  33. //console.log(Object.keys([13,4,6,7]));返回: ['0', '1', '2', '3']
  34. // console.log(Object.keys(btnsArr));
  35. //间歇式定时器.每2秒换一张图
  36. setInterval(function(btnsArr,btnKeys){
  37. console.log(btnsArr,btnKeys);
  38. slide.timerAuto(btnsArr, btnKeys);
  39. },
  40. 2000,
  41. [...btns.children],
  42. Object.keys([...btns.children])
  43. )
  44. }
  45. </script>

js代码

  1. // import {imgArr} from './data.js' //导出
  2. import imgArr from './data.js' //data.js是默认导出,这里可以自定义导出名字
  3. /**
  4. * 当前轮播图至少需要4个函数
  5. * 1.创建图片组
  6. * 2.创建按钮组
  7. * 3.创建按钮事件:实现点击按钮,图片切换
  8. * 4.定时轮播器:间歇式轮播()
  9. */
  10. /**
  11. * 1. 创建图片组
  12. */
  13. function createImg(imgs){
  14. // console.log(imgArr.length);
  15. for(let i=0;i<imgArr.length;i++){
  16. const img = document.createElement('img')
  17. //为每个元素添加自定义属性data-key
  18. img.dataset.key = imgArr[i].key
  19. img.src = imgArr[i].src
  20. const a = document.createElement('a')
  21. // a.href = imgArr[i].url
  22. // img.append(a)
  23. imgs.append(img)
  24. //为第一个元素添加active属性
  25. // if(i==0){
  26. // img.classList.add('active')
  27. // }
  28. i==0?img.classList.add('active'):''
  29. }
  30. }
  31. function createBtn(btns){
  32. for(let i=0;i<imgArr.length;i++){
  33. const btn = document.createElement('span')
  34. //为每个按钮添加自动以属性data-key
  35. btn.dataset.key = imgArr[i].key
  36. btns.append(btn)
  37. i==0?btn.classList.add('active'):''
  38. }
  39. }
  40. //3.创建按钮事件:实现点击按钮,图片切换
  41. function switchImg(btn,imgs){
  42. //1.点击按钮去掉所有按钮和图片的激活状态
  43. ;[...btn.parentNode.children].forEach(item =>item.classList.remove('active'))
  44. ;[...imgs.children].forEach(item=>item.classList.remove('active'))
  45. //2.根据当前用户点击的按钮设置为激活状态active
  46. btn.classList.add('active')
  47. // 3. 设置当前点击的按钮的自定义属性和图片的自定义属性相同的图片显示
  48. //根据当前按钮的key,找到对应的图片
  49. //btn.dataset == img.dataset.key
  50. // ;[...imgs.children].forEach(item=>{(item.dataset.key==btn.dataset.key)?item.classlist.add('active'):''})
  51. const currImg = [...imgs.children].find(item=>item.dataset.key==btn.dataset.key)
  52. currImg.classList.add('active')
  53. // console.log(currImg);
  54. }
  55. //4.定时轮播器:间歇式轮播()
  56. function timerAuto(btnsArr,btnKeys){
  57. //定时器 + 事件派发
  58. //setInterval = dispatchEvent
  59. //1.从头部取一个索引,第一个索引
  60. let key = btnKeys.shift()
  61. //2.根据索引,从按钮组中找到与该索引对应的按钮,给它自动派发点击事件
  62. btnsArr[key].dispatchEvent(new Event('click'))
  63. //3.将取出的按钮,再次放入到按钮数组的尾部,实现首尾相连
  64. btnKeys.push(key)
  65. }
  66. //导出,
  67. export default{
  68. imgArr,
  69. createImg,
  70. createBtn,
  71. switchImg,
  72. timerAuto
  73. }

效果图

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议