登录  /  注册
博主信息
博文 40
粉丝 0
评论 0
访问量 23913
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
仿写轮播图
飞天001
原创
400人浏览过

按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. }

效果图

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学