博客列表 >html轮播图的实现

html轮播图的实现

安超
安超原创
2022年11月12日 20:16:201264浏览

1.轮播图的实现途径

实现一个含有图片及图片指示符的轮播图,主要要几个方面:
1.图片的动态加载,从js里调入各种图片的信息,如图片源、图片指向的链接等;
2.实现按钮的动态生成;
3.样式的加载与取消 classList.add()和classList.remove等;
4.图片和按钮的自动显示与隐藏等;
5.图片和按钮的自动轮播,数组的自动循环,shift()和push()的应用
轮播效果图

2.html代码

  1. <body>
  2. <div class="slidershow">
  3. <div class="imgs"></div>
  4. <div class="btns"></div>
  5. </div>
  6. <script type="module">
  7. // 获取图片和按钮容器
  8. const imgs = document.querySelector('.imgs');
  9. const btns = document.querySelector('.btns')
  10. // 从外部导入函数,别名为imagesSlider,注意,使用时要采取 "imagesSlider.xxx"的形式
  11. import * as imagesSlider from "./js/slider.js";
  12. // 已有代码加载完成后,加载图片和按钮等
  13. window.onload = ()=>{
  14. // 加载图片组
  15. imagesSlider.createImage(imgs);
  16. // 加载按钮
  17. imagesSlider.createBtns(imgs,btns);
  18. // 创建按钮事件
  19. [...btns.children].forEach(function(btn){
  20. btn.onclick = function(){
  21. imagesSlider.switchImg(this,imgs);
  22. }
  23. })
  24. // [...btns.children].forEach(btn =>(btn.onclick = () => imagesSlider.switchImg(this,imgs)));不能用箭头函数,在箭头函数里,this表示undefiend。
  25. //自动播放
  26. // 按钮数组,三个span
  27. const btnArr = [...btns.children];
  28. const btnKeys =Object.keys(btnArr);
  29. setInterval(
  30. function(btnArr,btnKeys){
  31. imagesSlider.timePlay(btnArr,btnKeys);
  32. },2000,btnArr,btnKeys);
  33. }
  34. </script>
  35. </body>

3.轮播图的js代码

  1. // the information of the picture
  2. const imgArr = [
  3. {
  4. key:1,
  5. src:"images/item1.jpg",
  6. url:"https://www.jacgoo.com"
  7. },
  8. {
  9. key:2,
  10. src:"images/item2.jpg",
  11. url:"www.php.cn"
  12. },
  13. {
  14. key:3,
  15. src:"images/item3.jpg",
  16. url:"www.baidu.com"
  17. }
  18. ]
  19. // 产生图片的函数
  20. function createImage(imgs){
  21. // 产生一个文档片段
  22. console.log("------------------------")
  23. const frag = new DocumentFragment();
  24. for (let i = 0;i < imgArr.length;i++){
  25. console.log(imgArr[i].src);
  26. // 创建图片
  27. const img = new Image();
  28. img.src = imgArr[i].src;
  29. // 创建dataset属性
  30. img.dataset.key = imgArr[i].key;
  31. if(i === 0) img.classList.add('active');
  32. // 添加事件
  33. img.onclick = () => (location.href = imgArr[i].url);
  34. // 添加图片到片段中
  35. frag.append(img);
  36. }
  37. // 片段图片添加到图片容器中
  38. imgs.append(frag);
  39. }
  40. //产生按钮的函数
  41. function createBtns(imgs,btns){
  42. // 计算出所有图片的数量,根据这个来创建相同数量的按钮
  43. const imagesLength = imgs.childElementCount;
  44. console.log("button---------------")
  45. for(let i = 0;i < imagesLength;i++){
  46. const btn = document.createElement('span');
  47. // 按钮索引:data-key,必须与图片索引一致
  48. btn.dataset.key = imgs.children[i].dataset.key;
  49. // 第一个按钮处于激活状态
  50. if(i === 0 ) btn.classList.add('active')
  51. btns.append(btn);
  52. }
  53. }
  54. //更换图片函数
  55. function switchImg(currentbtn,imgs){
  56. // 去掉图片和按钮的激活状态
  57. [...currentbtn.parentNode.children].forEach(btn => btn.classList.remove('active'));
  58. [...imgs.children].forEach(img=>img.classList.remove('active'));
  59. // 将当前的按钮处于激活状态
  60. currentbtn.classList.add('active');
  61. // 根据索引,找到当前图片并显示出来,用链式写法实现。
  62. const currImg = [...imgs.children].find(img => img.dataset.key === currentbtn.dataset.key).classList.add('active');
  63. }
  64. //自动播放图片
  65. function timePlay(btnArr,btnKeys){
  66. // 取数组的第一个
  67. let key = btnKeys.shift();
  68. // 根据索引找到对应的按钮,再给他自动派发一个点击事件
  69. btnArr[key].dispatchEvent(new Event('click'));
  70. // 把刚才导出的按钮再从尾部进入,实现首尾相连
  71. btnKeys.push(key);
  72. }
  73. 导出四个函数
  74. export {createImage,createBtns,switchImg,timePlay};
  1. /* 图片 */
  2. .slidershow {
  3. width:240px;
  4. height:360px;
  5. }
  6. .slidershow img {
  7. width:100%;
  8. height:100%;
  9. border-radius: 10px;
  10. display: none;
  11. }
  12. .slidershow img.active{
  13. display: block;
  14. }
  15. /* 按钮容器 */
  16. .slidershow .btns {
  17. display:flex;
  18. place-content: center;
  19. transform:translateY(-40px);
  20. }
  21. .slidershow .btns > span {
  22. background-color:gold;
  23. height: 16px;
  24. width: 16px;
  25. border-radius: 50%;
  26. margin:5px;
  27. }
  28. .slidershow .btns > span.active {
  29. background-color: orangered;
  30. }
  31. .slidershow .btns > span:hover {
  32. cursor:pointer;
  33. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议