2021-08-27 轮播图

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>Leon</title>

  <style>

    *{margin: 0;padding: 0;}

    a{text-decoration: none;}

    .banner{

      width: 500px;

      height: 300px;

      border: 5px solid #ccc;

      margin: 100px auto;

      position: relative;

    }

    ul,li{list-style: none;}

    ul img{

      width: 500px;

      height: 300px;

    }

    ul>li{

      width: 500px;

      height: 300px;

      display: none;

    }

    ul>li.current{

      display: block;

    }

    .banner>a{

      width: 20px;

      height: 40px;

      background-color: #666;

      opacity: 0.5;

      color: #fff;

      line-height: 40px;

      text-align: center;

      display: block;

      position: absolute;

      top: 50%;

      transform: translateY(-20px);

    }

    .left{

      left: 0;

    }

    .right{

      right: 0;

    }

    ol{

      width: 100px;

      height: 20px;

      background-color: #fff;

      opacity: 0.7;

      border-radius: 10px;

      position: absolute;

      left: 50%;

      transform: translateX(-50px);

      bottom: 10px;

      display: flex;

      justify-content: space-evenly;

      align-items: center;

    }

    ol>li{

      width: 10px;

      height: 10px;

      background-color: red;

      border-radius: 50%;

      cursor: pointer;

    }

    ol>li.active{

      background-color: cyan;

    }

  </style>

</head>

<body>

  <div class="banner">

    <ul>

      <li class="current"><a href="javascript:;"><img src="./images/1.jpg"></a></li>

      <li><a href="javascript:;"><img src="./images/2.jpg"></a></li>

      <li><a href="javascript:;"><img src="./images/3.jpg"></a></li>

    </ul>

    <ol>

      <li class="active"></li>

      <li></li>

      <li></li>

    </ol>

    <a href="javascript:;" class="left">&lt;</a>

    <a href="javascript:;" class="right">&gt;</a>

  </div>

</body>

</html>

<script>

  // 1. 获取到要操作的元素

  let banner = document.querySelector('.banner');

  let ul = document.querySelector('ul');

  let ulis = document.querySelectorAll('ul>li');

  let olis = document.querySelectorAll('ol>li');

  let prve = document.querySelector('.left');

  let next = document.querySelector('.right');

  // 2. 通过定时器,让图片自动的轮播播放

  let timer; //定时器的标识

  let n = 0;// 变量n播放显示的图片的li的索引 ,0 表示第一张图片的li的索引

  timer = setInterval(function(){

    /*

    自动播放思路:

      通过定时器的每过一段时间执行函数代码,每过1秒让 变量n++,让显得li索引加1,

        当n = 3的时候,表示前一个显示的是最一张图片,此时需要显示的第一张,所以需要将 n = 0

      通过改变后的变量n的索引,来显示索引对应的图片li

        先将所有的ulis中的li元素的current样式,清 空,然后根据n的索引找到对应要显示的图片li,添加current样式

      通过改变后的变量n的索引,显示小圆点高亮

        先将所有的小圆点的li active样式清除,根据n的索引找到对应要高亮显示的小圆点li,添加active样式

    */

    // ①. 变量n索引值自增

    n++;

    // 调用play,图片播放函数

    play();

  },1000)

  // 3. 鼠标移入移出实现,图片播放的停止和继续

    // ①. 鼠标移入,播放停止(鼠标移入清除定时器)

  banner.onmouseenter = ()=>clearInterval(timer);

  // ②. 鼠标移出,播放继续

  banner.onmouseleave = ()=>{

    // 通过定时器,自动播放启动

    timer = setInterval(()=>{

      // ①. 变量n索引值自增

      n++;

      // 调用play显示函数

      play();

    },1000);   

  }

  // 4. 实现点击上一张下一张图片

    //①. 显示点击显示上一张图片

  prve.onclick = ()=>{

    n--;

    // 如果 n < 0 的时候,表示上一次显示的第一张图片,这次要显示的第三张

    if(n<0){

      n = 2;

    }

    // 调用图片显示函数

    play();

  }

    // ②. 显示点击下一张图片

  next.onclick = ()=>{

    n++;

    // 调用图片显示函数

    play();

  }

  // 5. 点击小圆点实现图片切换播放

  // ①. 比遍历olis,给ol中的每一个li一个点击事件

  for(let i = 0; i<olis.length; i++){

    // 循环的时候,使用的let声明的i,所有在点击事件中,可以拿到每一个i的值

    olis[i].onclick = ()=>{

      // console.log(i);

      // 将点击事件中i的值给到n,让点击的这个小球的索引对应的图片显示播放

      n = i;

      // 调用播放显示函数

      play();

    }

  }


  // 图片播放函数

  function play(){

    // ②. 当n = 3时,需要将n赋值0

    if(n==3){

      n = 0;

    }

    // ③. 遍历ulis,将所有的li的current样式清空

    for(let i = 0; i<ulis.length; i++){

      ulis[i].className = '';

    }

    // ④. 给变量n对应的ulis中的li添加current样式

    ulis[n].className = 'current';

    // ⑤.遍历olis,将ol中所有的li清除 active样式

    for (let j = 0; j < olis.length; j++) {

      olis[j].className = '';

    }

    // ⑥.给n对应的小圆点添加active样式

    olis[n].className = 'active'

  }

</script>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容