TIL

2020-07-06 Volume & Modal Router

Hoon1994 2020. 7. 6. 21:37

#유튜브 클론 코딩

 

input.videoPlayer__volume#jsVolume(type="range", min="0" max="1" value="0.5" step="0.1")

const volumeRange = document.getElementById("jsVolume");

volumeRange.value = 0; 

function handleDrag(event) {
  const {
    target: { value }
  } = event;
  videoPlayer.volume = value;
  if (value >= 0.6) {
    volumeBtn.innerHTML = '<i class="fas fa-volume-up"></i>';
  } else if (value >= 0.2) {
    volumeBtn.innerHTML = '<i class="fas fa-volume-down"></i>';
  } else {
    volumeBtn.innerHTML = '<i class="fas fa-volume-off"></i>';
  }
}

volumeRange.addEventListener("input", handleDrag);

 

동영상의 볼륨을 유저가 직접 조절할 수 있는 기능을 구현했다. 

Video 태그에서 volume 이 지원되기 때문에, type이 range인 input을 만들고 

해당 input의 value 값을 얻어 VideoPlayer에 저장해주면 잘 동작한다. 

 

value 값에 따라 innerHTML을 통해 아이콘도 변경되게 적용하여 UX 개선은 덤! 

 

 

#Vue Router

 

보통, 모달 창을 띄운다면 URL 주소를 변경하지 않고, Store의 값 (boolean)을 하나 만들고,

v-if="boolean" 을 통해 모달을 보여주거나, 보여주지 않았다. 

 

하지만 이처럼 if문을 통해 렌더를 해주게 되면 모바일 같은 경우 뒤로가기 버튼을 눌렀을 때 

모달이 닫히지 않는다. 물론 뒤로가기 버튼을 키 값을 추가하여 뒤로가기를 눌렀을 때 닫히게 할 수 있지만, 

이번에는 모달창을 하나의 페이지로 분류되는 로직을 구현해봤다. 

 

// Vue.js 

watch: {
	$route: {
    	async handler(to, from) {
          const { option } = to.query;
          if (option) {
            //  to.query.option에 새로운 값이 들어오면 실행될 함수
          }     
        }
    }
}

methods: {
    async openModal() {
	  // query를 복사
      const query = _cloneDeep(this.$route.query);
      query.option = 'option';
      this.$router.push({ query });
    },
}


 

watch에 route의 값이 변할 때 실행되는 로직을 구현했고, openModal은 사용자가 클릭했을 때의 로직이다. 

값이 수정되는 걸 방지하기 위해 cloneDeep으로 query를 복사하여 변수에 저장하고, 원하는 값을 저장한 후 

router.push 한다. 

 

단순히 위의 기능만 구현한다고 당연히 모달 창이 열리진 않는다. 

위의 기능은 route url을 생성한거고, push해주는 역할일 뿐이며, 평소와 같이 모달을 열리게 해주는 건 

data를 하나 만들어서 true/false 해주면 된다. 

 

'TIL' 카테고리의 다른 글

2020-07-09 Post Register API  (0) 2020.07.09
2020-07-08 Register API  (0) 2020.07.08
2020-07-02 Customize Video Player  (0) 2020.07.02
2020-07-02 Vue.js D-day Counter 공통 컴포넌트  (0) 2020.07.02
2020-07-01 Customize Video Player  (0) 2020.07.01