项目思路总结-API-01

130 阅读4分钟

1.随机抽取的名字显示到指定的标签内部

需求:将名字放入span 盒子内部 分析: ①:获取span 元素 ②:得到随机的名字 ③:通过innerText 或者 innerHTML 讲名字写入元素内部

let names = [‘aaa’,’bbb’]
// 前置知识:为按钮绑定单击事件:单击按钮之后再进行处理
      let btn = document.querySelector('button')
      let span = document.querySelector('span')
// 为btn添加单击(click)事件的监听,当用户单机之后,就调用你传入的回调函数进行处理
      btn.addEventListener('click', function() {
        // 单击按钮之后的业务处理
        //生成一个随机索引
       let index = parseInt(math.random()*names.length)
      //根据索引获取姓名
      let name = names[index]
     //将姓名渲染到指定的元素中
     span.innerText  = name

2.页面刷新,图片随机更换

需求:当我们刷新页面,页面中的图片随机显示不同的图片

  <button>单击随机显示图片</button>
  <img src="" alt="" />

  <script>
    // 获取元素
    let btn = document.querySelector('button')
    let img = document.querySelector('img')

    // 绑定单机按钮
    btn.addEventListener('click', function () {
      // 1-4的随机数
      let imgName = parseInt(Math.random() * 4) + 1
      // 生成路径
      let path = `./images/${imgName}.jpg`

      img.src = path
    })

3.页面刷新,随机更换背景图片

需求:当我们刷新页面,页面中的背景图片随机显示不同的图片 分析: ①: 随机函数 ②: css页面背景图片 background-image ③: 标签选择body, 因为body是唯一的标签,可以直接写 document.body.style

<body>
  <div>
    <img src="./images/b01.jpg" alt="" />
    <p>第1张图片</p>
  </div>

  <script>
    // 获取元素
    // 设置src属性
    let img = document.querySelector('img')
    // 设置图片描述信息
    let p = document.querySelector('p')
    // 图片索引从1开始,后期根据索引生成路径
    let index = 1
    let timeId
    //  封装函数
    function startTime() {
        // 开启定时器
       timeId = setInterval(function () {
        // 让索引自增
        index++
        // 判断索引的边界,上限,如果到10了,就应该重置到1
        if (index === 10) {
          index = 1
        }
        //根据索引 生成一个图片路径
        let path = `./images/b0${index}.jpg`
        //  将生成的路径赋值给img的src属性
        img.src = path
        //设置图片的描述信息
        p.innerText = `第${index}张图片`
      }, 1000)
    }
    startTime()

    // 添加鼠标进入离开效果
    let div =document.querySelector('div')

    // 鼠标进入 mouseenter
    div.addEventListener('mouseenter',function(){
      clearInterval(timeId)
    })
    // 鼠标离开  mouseleava
    div.addEventListener('mouseleave',function(){
      startTime(timeId)
    })

  </script>
</body>

4.设置/修改 表单元素

(1)看到密码,本质是把表单类型转换为文本框
(2)复选框全选

​ 1.获取全选复选框的状态:checked状态,它是一个内置属性

​ 2.获取下面的所有复选框,获取的是一个伪数组,遍历为每一个复选框的checked设置为全选复选框的 状态值

 <body>
  <input type="password" class="username" />
  <button class="changeType"></button>
  <br />

  
  <input type="checkbox" class="chkAll" />全选
  <div>
    <input type="checkbox" />写代码 <input type="checkbox" />调bug
    <input type="checkbox" />写文档
  </div>
  <button class="getChioce">获取用户选择</button>

  <script>
    // 1.密码边文本
    // 获取元素
    let changeType = document.querySelector('.changeType')
    let username = document.querySelector('.username')
    // 生成点击事件
    changeType.addEventListener('click', function () {
      // 获取当前输入框type值
      let type = username.type
      // 判断,当属性值等于密码框时,点击变更为文本框,否则变为密码框
      if (type === 'password') {
        username.type = 'text'
      } else {
        username.type = 'password'
      }
      // 方法二  三元  根据当前的type设置属性值
      //  username.type = username.type ==='password' ? 'text' :'password'
    })

    // 2.选中全选复选框
    let chkAll = document.querySelector('.chkAll')
    // 选中结构中的复选框
    let chks = document.querySelectorAll('div input')
    // 为全选复选框绑定单机事件
    chkAll.addEventListener('click', function () {
      //  获取全选复选框的状态,选中为True,否则为false
      let state = chkAll.checked
      // 遍历所有复选框,设置checked
      for (let i = 0; i < chks.length; i++) {
        chks[i].checked = state
        console.log(chks, state);

      }
    })
  </script>
</body>

5.获取验证码

倒计时五秒,禁用

 
    // 获取当前元素
    let btn = document.querySelector('button')

    //  绑定单机按钮
    btn.addEventListener('click', function () {
      // 设置运行时间变量
      let timeCount = 5
      // 开启定时器
      // timeId:就是创建这个定时器所返回的句柄,这个句柄与当前定时器无关款
      let timeId = setInterval(function() {
        timeCount--
        // 设置元素内容
        btn.innerText = `倒计时${timeCount}s`
        // 设置元素属性  倒计时禁用
        btn .disabled =true
        
      //  判断时间是否失灵,如果是零就停止定时器--清除定时器    (轮询重复判断)
      if (timeCount == -1){
        // 清除定时器
        clearInterval(timeId)
        btn.disabled=false
        btn.innerText = '获取验证码'
      }
     
      },1000)
    })

6.倒计时效果

需求:按钮60秒之后才可以使用

1.有一个全局的索引 1-9

2.添加一个定时器,让索引值能够间隔某个时间从1变到9 3.要根据索引值生成一个路径 4.将路径赋值给img标签的src属性

    <script>
      // 获取元素
      // 设置src属性
      let img = document.querySelector('img')
      // 设置图片描述信息
      let p = document.querySelector('p')
      // 图片索引从1开始,后期根据索引生成路径
      let index =1

      // 开启定时器
      setInterval(function(){
        // 让索引自增
        index++
        // 判断索引的边界,上限,如果到10了,就应该重置到1
        if(index ===10){
          index=1
        }
        //根据索引 生成一个图片路径
         let path = `./images/b0${index}.jpg`
        //  将生成的路径赋值给img的src属性
        img.src=path
        //设置图片的描述信息
        p.innerText = `第${index}张图片`
      },1000)
      
    </script>

7.淘宝点击关闭二维码

需求:点击关闭之后,淘宝二维码关闭

1.获取至少两个元素: 关闭按钮 二维码元素 2.为关闭按钮绑定单击事件,在事件处理函数中 3.将二维码元素隐藏

      // 获取元素
      let span = document.querySelector('span')
      let erweima = document.querySelector('.erweima')

      // 为关闭按钮绑定单击事件
      span.addEventListener('click',function(){
        // 将二维码隐藏  通过设置样式可实现
        erweima.style.display='none'
      })

8.随机点名

需求:点击按钮之后,随机显示一个名字,如果没有显示则禁用按钮

      // 生成模拟数据
      let names = ['aaa','bbb','ccc','ddd','eee','fff']
      // 获取元素
      let p =document.querySelector('p')
      let btn =document.querySelector('button')

      // 绑定单击事件
      btn.addEventListener('click',function(){
        // 生成数组的索引  随机数
        let index = parseInt(Math.random()*names.length)
        // 获取索引对应的名字 赋值
        let name = names[index]
        // 将当前索引位置删除  选中的
        names.splice(index,1)
        // 将姓名填充到指定元素中
        p.innerText = name
        // 判断数组长度是否为0 ,为0说明删除了所有元素
        if(names.length === 0){
          btn.disabled=true
        }
      })
随机点名进阶版

1.单击开始之后,添加定时器,在定时器中随机获取姓名进行渲染 2.单击结束之后,清除定时器,获取最后一次所选中的姓名进行渲染`

    // 生成模拟数据
    let names = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']

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

    // 声明全局变量
    let timeId
    let index


    // 开始  绑定单击事件
    start.addEventListener('click', function () {
      // 添加定时器
      timeId = setInterval(function () {
        // 生成一个随机suoyin
        let index = parseInt(Math.random() * names.length)
        // 根据索引获取名字
        let name = names[index]
        // 将获取的名字渲染添加到p 标签
        p.innerText = name
      }, 50)
    })
    // 结束  绑定单击事件
    end.addEventListener('click', function () {
      // 定时器结束
      clearInterval = (timeId)
      //删除选中的索引元素
      names.splice(index, 1)
      // 判断数组是否长度为0,为0禁用按钮
      if (names.length === 0) {
        start.disabled = true
      }
      console.log(names);
    })

9.微博输入案例

需求:用户输入文字,可以计算用户输入的字数

分析: ①:判断用输入事件 input ②:不断取得文本框里面的字符长度 ③:把获得数字给下面文本框

    <div class="w">
      <div class="controls">
        <img src="images/tip.png" alt="" /><br />
        <textarea
          placeholder="说点什么吧..."
          id="area"
          cols="30"
          rows="10"
          maxlength="200"
        ></textarea>
        <div>
          <span class="useCount">0</span>
          <span>/</span>
          <span>200</span>
          <button id="send">发布</button>
        </div>
      </div>
      <div class="contentList">
        <ul></ul>
      </div>
    </div>
    <script>
        // 获取元素
        let textarea = document.querySelector('textarea')
        let useCount = document.querySelector('.useCount')

        // 为文本域添加内容监听input
        textarea.addEventListener('input',function(){
          // 获取用户输入内容的长度,赋值给useCount
          useCount.innerText = textarea .value .trim().length
        })
    </script>

10.全选复选文本框案例

需求:用户点击全选,则下面复选框全部选择,取消全选则全部取消,文字对应变化

分析: ①:全选复选框点击,可以得到当前按钮的 checked ②:把下面所有的小复选框状态checked,改为和全选复选框一致 ③:如果当前处于选中状态,则把文字改为取消, 否则反之

全选框
// 获取元素
      let checkAll = document.querySelector('#checkAll')
      let all = document.querySelector('.all')
      let cks = document.querySelectorAll('.ck')
    //  console.log(checkAll,all,ck);
      
      // 实现全选
      // 用全选复选框的状态,赋值给下面所有的复选框
      checkAll.addEventListener('click',function(){
        // 获取当前全选框状态  
        let state = checkAll.checked
        // 伪数组遍历,赋值给下面的复选框
        cks.forEach(function(element,index) {
          element.checked = state
        })
      })
复选框
方法一 一票否决法

​ 下面的三个复选框的选中状态影响全选复选框的选中状态 1.设置全局变量,标记全选复选框的状态,默认为true 2.为下面的三个复选框添加单击事件 3.遍历三个复选框,判断是否有其中任何一个没有被选中,如果有一个没选,将标记设置为false 4.将标记值赋值给全选复选框

        // 设置一个全局标记  标记去选复选框的状态
        for (let i = 0; i < cks.length; i++) {
           cks[i].addEventListener('click',function(){
              // 判断当前遍历到的复选框的选中状态是否为 非选中
              // 满足条件,说明有一个没有
               let flag = true
              cks.forEach(function(v,i){
                 if(v.checked == false){
                   flag = false
                 }
              })
              checkAll.checked = flag
           })
        }
方法二 判断获取当前被选中的复选框数量 与总数比较

1.在每个复选框单击之后,遍历获取当前被选中的复选框的数量, 2.如果数量 === 所有复选框的总数,说明 全部都被选中了,全选应该选中,否则取消选中

// 设置一个全局的标记
        for (let i = 0; i < cks.length; i++) {
          cks[i].addEventListener('click',function(){
            // 设置一个数量
            let count = 0

            // 遍历所有复选框,判断复选框是否被选中,如果被选中,数量+1
            cks.forEach(function(v){
              if(v.checked == true){
                count++
              }
            })
            
            if(count == cks.length){
              checkAll.checked = true
            }else{
              checkAll.checked = false
            }
          })
        }
方法三 用伪类:checked直接获取选中复选框的数量
优化:添加全选和取消
    <script>
      // 获取元素
      let checkAll = document.querySelector('#checkAll')
      let all = document.querySelector('.all')
      let cks = document.querySelectorAll('.ck')
    //  console.log(checkAll,all,ck);
      
      // 实现全选
      // 用全选复选框的状态,赋值给下面所有的复选框
      checkAll.addEventListener('click',function(){
        // 获取当前全选框状态  
        let state = checkAll.checked
        // 伪数组遍历,赋值给下面的复选框
        cks.forEach(function(element,index) {
          element.checked = state
        })

        // 设置文本内容  如果是全选状态就是取消,否则就是全选
        all.innerText = state? '取消' : '全选'
      })

         for (let i = 0; i < cks.length; i++) {
          cks[i].addEventListener('click',function(){
            // 让数量等于选中复选框数量
             let count = document.querySelectorAll('.ck:checked').length
             if(count == cks.length){
              checkAll.checked = true
              all.innerText = '取消'
            }else{
              checkAll.checked = false
              all.innerText = '全选'
            }
          })
        }

11.购物车加减操作

需求:用户点击加号,则文本框+1,点击减号,则文本框-1,如果文本框为1,则禁用减号

     // 获取元素
      let total = document.querySelector('#total')
      let add = document.querySelector('#add')
      let reduce = document.querySelector('#reduce')

      // 做+
      add.addEventListener('click',function(){
        // 获取输入框数量
        let count = total.value
        // 数量加1
        count++
        // 重新赋值给输入框
        total.value = count
        // 加一定会导致数量>1
          reduce.disabled = false
        
      })

      // 做-
      reduce.addEventListener('click',function(){
        // 获取输入框数量
        let count = total.value
        // 数量加1
        count--
        // 重新赋值给输入框
        total.value = count
        // 判断数量是否是1,如果是1则禁用按钮
        if(count == 1){
          reduce.disabled = true
        }
      })