实现发布以及删除功能

138 阅读1分钟

image.png

涉及到的技术

1.js中的获取元素

2.文本域自动获取光标

3.注册事件,给元素添加点击事件

4.生成一个随机数

5.渲染数据,遍历数据 数据拼接 数据的渲染

6.发送完之后 清除文本域的内容

7.按下确认键实现发布功能

8.监听文本域输入的字数

9.把发布的时间封装成一个函数,直接调用即可

<body>
  <div class="w">
    <!-- 操作的界面 -->
    <div class="controls">
      <img src="./images/9.6/tip.png" alt="" /><br />
      <!-- maxlength 可以用来限制表单输入的内容长度 -->
      <textarea placeholder="说点什么吧..." id="area" cols="30" rows="10" maxlength="200"></textarea>
      <div>
        <span class="useCount" id="useCount">0</span>
        <span>/</span>
        <span>200</span>
        <button id="send">发布</button>
      </div>
    </div>
    <!-- 微博内容列表 -->
    <div class="contentList">
      <ul id="list">
        <!-- <li>
            <div class="info">
              <img class="userpic" src="./images/9.5/01.jpg" />
              <span class="username">名字</span>
              <p class="send-time">发布于 时间</p>
            </div>
            <div class="content">内容</div>
            <span class="the_del">X</span>
          </li> -->
      </ul>
    </div>
  </div>

模拟数据

<script>
    // 模拟数据,后期我们需要从这个数组中随机获取一个数据对象,做为发布微博的用户信息进行渲染,但是这个不是关键业务,我也可以固定写死
    let dataArr = [
      { uname: '司马懿', imgSrc: './images/9.5/01.jpg' },
      { uname: '女娲', imgSrc: './images/9.5/02.jpg' },
      { uname: '百里守约', imgSrc: './images/9.5/03.jpg' },
      { uname: '亚瑟', imgSrc: './images/9.5/04.jpg' },
    ]

js中的获取元素

    let area = document.querySelector('#area')     //文本域
    let useCount = document.querySelector('#useCount')     //输入的字数
    let send = document.querySelector('#send')     //发送按钮
    let ul = document.querySelector('ul')     //等会要把创建的li元素追加到ul里面

文本域自动获取光标

    // 文本域自动获取光标
    area.focus()

注册事件,给元素添加点击事件

创建一个新的元素

生成一个随机数

渲染数据,遍历数据 数据拼接 数据的渲染

发送完之后 清除文本域的内容

    // 注册事件,给元素添加点击事件,给发送添加点击事件
    send.addEventListener('click', function () {

      // 创建一个li元素
      let li = document.createElement('li')
      

      // 在模拟数据里面生成一个随机数
      let random = parseInt(Math.random() * dataArr.length)


      // 文本域的内容
      let content = area.value

      // 接着 判断用户是否输入文字,如果没有输入则设置发送不了的功能
      if (content.trim().length === 0) {
        alert('请输入内容再发送哦')
        return
      }
      
      // 渲染数据,遍历数据 数据拼接 数据的渲染
      // 创建好li元素之后,里面是一个空的标签,所以要在里面添加内容
      li.innerHTML = `<div class="info">
                        <img class="userpic" src="${dataArr[random].imgSrc}" />
                        <span class="username">${dataArr[random].uname}</span>
                        <p class="send-time">发布于 ${timeFormat()}</p>
                        </div>
                        <div class="content">${content}</div>
                        <span class="the_del">X</span>`

      // 我们有了li标签,并且也在里面添加好了内容,接下来就可以把它追加到ul元素里面(在最前面)啦!父元素.inserBefore
      ul.insertBefore(li, ul.children[0])


      // 点击关闭X这个按钮的时候,就删除整一个盒子
      let del = document.querySelector('.the_del')     //获取删除微博按钮的操作
      del.addEventListener('click', function () {
        ul.removeChild(li)
      })


      // 发送完之后 要清除文本域的内容
      area.value = ''
      useCount.innerText = 0

    })

按下确认键实现发布功能

area.addEventListener('keyup', function (e) {
      // console.log(e, 123);
      if (e.key == 'Enter') {
        send.click()
      }
    })

监听文本域输入的字数

area.addEventListener('input', function () {
      let words = area.value.trim().length
      useCount.innerText = words
    })

把发布的时间封装成一个函数,直接调用即可


    let timeFormat = function () {
      let date = new Date()

      //获取年份
      let year = date.getFullYear()

      //获取月份
      let month = date.getMonth() + 1

      //获取日期
      let dates = date.getDate()

      //获取小时
      let hour = date.getHours()

      //获取分钟
      let minutes = date.getMinutes()

      //获取秒数
      let seconds = date.getSeconds()
      return `${year}-${month}-${dates} ${hour}:${minutes}:${seconds}`
    }

  </script>
  </body>