원본 JS 탄막 효과 구현을 위한 간단한 조작 안내서

5523 단어 js탄막원생
앞말
현재 많은 생방송 플랫폼이나 영상 플랫폼은 탄막 강화와 관중과의 상호작용 효과를 사용한다. 그렇다면 어떻게 JS로 이런 효과를 실현할 수 있을까. 초보자의 방법으로 이 방법을 기록하고 소의 지도를 환영한다.
1. 먼저 문서를 조작하려면 Dom의 요소를 받아야 한다. 물론 여러 가지 방법이 있다. 여기는document를 사용한다.querySelector.
2. 여기도 키보드와 마우스를 보내기 위해 함수 function sendMsg () {
먼저 편집한 내용을 받아들일 용기를 만들어야 합니다. 여기는 span 라벨을 사용합니다. 물론 다른 라벨도 가능합니다.

var oSpan=document.cerateElement(“span”)
oSpan을 보여줄 oVideoBox에 삽입하기

oVideoBox.appendChild(oSpan)
oSpan에 삽입된 스타일을 편집하기 위해 class를 추가합니다. 물론 js도 사용할 수 있습니다. 여기에서 사용하는 CSS 스타일 oSpan도 사용할 수 있습니다.classList.add(“danmu”)
innerHTML로 사용자 이미지 및 탄막 내용 연결하기

oSpan.innerHTML =` < img src ="./source/lei.jpg" /> ${oContent.value}
탄막이 나타나는 초기 위치를 계산합니다. left 위치 이동 초기 위치는 oVideoBox의 너비 oVideoBox입니다.offsetWidth.oSpan의 초기 포지셔닝이기도 합니다. oSpan.offsetLeft
oVideoBox 내의 무작위 높이를 초과하지 않도록 top 위치 이동의 초기

var maxTop=oVideoBox…clientHeight-oSpan.offsetHeight;
var top=Math.round(Math.random()*maxTop)
oSpan.style.top = top+ ‘px'
물론 JS의 애니메이션도 타이머를 빼놓을 수 없다.여기도 set Interval () 을 사용합니다.

var timer=setInterval(()=>{
var left=oSpan.offsetLeft
left-=10
oSpan.style.left= left+ ‘px'
이쪽으로 판단해 볼게요. 화면을 넘어서면 탄막과 타이머를 빼주세요.

if(left<-oSpan.offsetWidtb){
clearInterval(timer);
oSpan.remove();}},100)
이상에서 간이판의 탄막 함수를 완성하면 봉인이 완성되고 뒤에서 인용할 수 있습니다.
이벤트는 클릭부터 시작하고, 탄막도 클릭 이벤트 oSend를 만듭니다.onclick,

oSend.οnclick=function(){ sendMsg()}
뒤에 키보드를 추가할 수 있는 enter는 이벤트 의뢰 윈도우입니다.οnkeydοwn=function(e){

var ev = e || event;
var keyCode = ev.keyCode || ev.which;
키보드 enter를 누르면 키코드 코드가 13과alt 조합이라고 판단합니다.

if (keyCode === 13 && ev.altKey) {
sendMsg();}}
다음은bod 코드입니다. 연습할 수 있습니다.

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title> _ </title>
 <style>
 * {
  padding: 0;
  margin: 0;
 }

 body {
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
 }

 .wrapBox {
  width: 800px;
  height: 550px;
  border: 1px solid #000;
  margin: 50px auto 0;
 }

 .videoBox {
  height: 500px;
  position: relative;
  overflow: hidden;
 }

 .videoBox img {
  width: 100%;
  height: 100%;
 }

 video {
  width: 100%;
  /* height: 500px; */
 }

 .danmuSend {
  display: flex;
  height: 50px;
 }

 #content {
  flex: 1;
 }

 #send {
  width: 100px;
 }

 .danmu {
  color: #f00;
  font-size: 20px;
  position: absolute;
  left: 800px;
  top: 0;
  white-space: nowrap;
 }

 .danmu img {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  vertical-align: middle;
  display: inline-block;
 }
 </style>
</head>

<body>
 <div class="wrapBox">
 <div class="videoBox">
  <img src="../../source/bg.jpg" />
  <!-- <span class="danmu"> </span> -->
  <!-- <span class="danmu"> </span>
  <span class="danmu"> </span>
  <span class="danmu"> </span>
  <span class="danmu"> </span> -->
 </div>
 <div class="danmuSend">
  <input id="content" type="text">
  <button id="send"> </button>
 </div>
 </div>
</body>
다음은 JS의 코드입니다.

<script>


 var oSend = document.querySelector('#send');
 var oContent = document.querySelector('#content');
 var oVideoBox = document.querySelector('.videoBox');




 function sendMsg() {
 var content = oContent.value;

 var oSpan = document.createElement('span');
 oSpan.className = 'danmu';
 oSpan.innerHTML = `<img src="../../source/bg.jpg">${content}`;

 oVideoBox.appendChild(oSpan);

 var maxTop = oVideoBox.clientHeight - oSpan.offsetHeight;

 oSpan.style.top = Math.round(Math.random() * maxTop) + 'px';
 
 var timer = setInterval(() => {
  var left = oSpan.offsetLeft;
  left -= 10;
  oSpan.style.left = left + 'px';
  if (left < -oSpan.offsetWidth) {
  clearInterval(timer);
  oSpan.remove();
  }
 }, 100);
 }

 oSend.onclick = function () {
 sendMsg();
 }

 window.onkeydown = function (e) {
 var ev = e || event;
 var keyCode = ev.keyCode || ev.which;
 if (keyCode === 13 && ev.altKey) {
  sendMsg();
 }
 }

</script>
총결산
원생 JS의 탄막 효과 실현에 관한 이 글을 소개합니다. 원생 JS의 탄막 실현 내용과 관련된 더 많은 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기