6.视频弹幕-第⼗四届蓝桥杯web应用开发--省赛

分析

类型:VUE
分数:15分
难度:难

考点

  • 动态添加 dom、移除 dom
  • setInterval() 定时器的使用、clearInterval() 使用
  • 通过 left 属性,控制元素向左移动

解题思路

第一题:动态添加弹幕,在 定时器 中,控制弹幕向左移动,当移出屏幕时,移除弹幕

第二题:调用 renderBullet() 函数发送弹幕,注意第3个参数是 true 表示新弹幕

技巧

使用 getRandomNum() 函数获取随机数
使用 getEleStyle() 函数获取 dom 的宽度、高度

实现

第一题

修改 index.js 文件:

/**
 * @description 根据 bulletConfig 配置在 videoEle 元素最右边生成弹幕,并移动到最左边,弹幕最后消失
 * @param {Object} bulletConfig 弹幕配置
 * @param {Element} videoEle 视频元素
 * @param {boolean} isCreate 是否为新增发送的弹幕,为 true 表示为新增的弹幕
 *
 */
function renderBullet(bulletConfig, videoEle, isCreate = false) {
  const spanEle = document.createElement("SPAN");
  spanEle.classList.add(`bullet${index}`);
  if (isCreate) {
    spanEle.classList.add("create-bullet");
  }
  // TODO:控制弹幕的显示颜色和移动,每隔 bulletConfig.time 时间,弹幕移动的距离  bulletConfig.speed

  videoEle.appendChild(spanEle)

  // 设置弹幕的left初始位置
  const videoRect = getEleStyle(videoEle)
  let left = videoRect.width;
  const top = getRandomNum(videoRect.height)

  spanEle.innerText = bulletConfig.value
  spanEle.style.color = "#"+getRandomNum(999999)
  spanEle.style.top = top+"px"


  const spanRect = getEleStyle(spanEle)

  const si = setInterval( ()=>{
    // 每次移动距离
    left -= bulletConfig.speed
    spanEle.style.left = left+"px"
    // 控制是否隐藏。要加在 setInterval() 中,实时控制弹幕隐藏/显示
    if(bulletConfig.isHide){
      spanEle.style.display = "none"
    }else{
      spanEle.style.display = "inline"
    }

    // 判断弹幕移出 #video ,移除弹幕,停止 setInterval() 函数
    if( left + spanRect.width <= 0){
      videoEle.removeChild(spanEle)
      // 弹幕移出后,停止执行,减轻浏览器压力
      clearInterval(si)

    }
  },bulletConfig.time)

}

第二题

修改 index.js 文件:

document.querySelector("#sendBulletBtn").addEventListener("click", () => {
  // TODO:点击发送按钮,输入框中的文字出现在弹幕中
  bulletConfig.value = document.querySelector("#bulletContent").value;
  renderBullet(bulletConfig, videoEle,true);
});

原文出处:/show_1GWMfTIClpX.html