随机点名案例

343 阅读1分钟

思路:

1.获取元素

2.为开始按钮添加单击事件,开启定时器,获取一个随机索引号,根据索引号生成对应名字,再把名字渲染到页面中

3.为结束按钮添加单击事件,关闭定时器,删除元素(拿到一个名字便删掉一个名字),最后判断数组长度是否为0,为0时禁用开始按钮

注意:这里定时器的句柄和随机索引号要声明在外面(全局变量),因为开始按钮和结束按钮是两个不同的函数,会有作用域问题(函数内部无法直接使用另外一个函数内部声明的成员,函数内部可以使用函数外部的成员)

<p>这里显示名字</p>
  <button class="start">开始随机点名</button>
  <button class="end">结束随机点名</button>

  <script>
    // 名字数据
    let arrName = ['张三', '李四', '王五', '赵六', '周七']

    // 获取元素
    let start = document.querySelector('.start')
    let end = document.querySelector('.end')
    let p = document.querySelector('p') //渲染元素

    let timeId, index //定时器句柄,要在外面(全局变量)函数作用域问题

    //单击开始按钮事件
    start.addEventListener('click', function () {
      //生成定时器
      timeId = setInterval(function () {
        // 随机获取一个索引号
        index = parseInt(Math.random() * arrName.length)

        //根据索引号生成对应的名字
        let name = arrName[index]

        // 把名字渲染到页面内容p标签里面
        p.innerText = name
      }, 100)
    })

    //单击结束按钮事件
    // 函数作用域问题
    // 函数内部无法直接使用另外一个函数内部声明的成员
    // 函数内部可以使用函数外部的成员
    end.addEventListener('click', function () {
      //  关闭定时器
      clearInterval(timeId)

      //删除元素 ,拿到一个名字删除一个名字
      arrName.splice(index, 1)

      // 判断数组是否长度为0,为0时禁用开始按钮
      if (arrName.length === 0) {
        start.disabled = true
      }
    })
  </script>