일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 오블완
- vue기초
- ethers type
- ambiguous function description
- ethers
- 러스트 기초 학습
- rust 기초
- 러스트 기초
- ethers websocket
- 러스트기초
- ethers typescript
- 머신러닝기초
- SBT표준
- 스마트컨트렉트테스트
- multicall
- git rebase
- 프록시배포구조
- Vue
- 티스토리챌린지
- 스마트 컨트렉트 함수이름 중복
- Vue.js
- 스마트컨트렉트 함수이름 중복 호출
- chainlink 설명
- nest.js설명
- 스마트컨트렉트프록시
- 컨트렉트 동일한 함수이름 호출
- ethers v6
- 스마트컨트렉트 예약어 함수이름 중복
- 체인의정석
- 컨트렉트 배포 자동화
- Today
- Total
체인의정석
유튜브 layzy load 시키기 동영상 lazyload 본문
영상을 바로 페이지에 불러오게 되면 시간이 오래걸린다.
따라서 웹페이지 속도를 향상시키기위하여 레이지로드를 사용하는것이 더 유리하다.
유튜브에서 따로 지원해주지 않기 때문에 이는 따로 구현하여 실행해야 한다.
HTML
<div class="youtube" data-embed="유튜브아이디"> </div> |
유튜브를 클래스를 두고 data-embeded안에 유튜브 영상 아이디를 저장시킨다.
이때 data- 를 사용하는 이유는 이렇게 될 시 youtube[0].dataset 이라는 저장공간에 바로 저장되어 html에서 지정해서 불러오는 것 보다 더 빠른 속도로 불러올 수 있다. 따라서 이렇게 data- 로 클래스를 두는 것은 여러 모듈에서 자주 쓰인다. 여기서도 data-embeded에 유튜브 영상아이디를 두어서 빠르게 접근하도록 한다.
또한 맨처음 사진이 멈춰있을 때 플레이 버튼을 만들어주기 위해 다음과 같이 play-button 클래스를 넣어준다.
JS
( function() { let youtube = document.querySelectorAll( ".youtube" );
for (let i = 0; i < youtube.length; i++) { let source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg";
let image = new Image(); image.src = source; image.alt = 'youtube thumbnail' image.addEventListener( "load", function() { youtube[i].appendChild( image ); }( i ) );
youtube[i].addEventListener( "click", function() { let iframe = document.createElement( "iframe" ); iframe.setAttribute( "frameborder", "0" ); iframe.setAttribute( "allowfullscreen", "" ); iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&autoplay=1" );
this.innerHTML = ""; this.appendChild( iframe ); } ); }; } )(); |
유튜브가 들어간 class에서 썸네일 이미지를 source에 넣은 후 넣는다.
이때 youtube[i].dataset을 하면 dataset 안에 있는 영상아이디를 불러올 수 있으므로, 이를 이용한다.
이후 상세 설정 값은 addEventListener에 클릭을 했을 경우 주게 된다. 이때 속성안에 iframe을 만드는 동작을 하고 기존의 html을 지운 후 appendChild를 한다.
한마디로 처음에는 썸네일 이미지를 불러와서 html파일로 넣어둔 후 이후 클릭이벤트가 일어났을때 iframe을 새로 만들어서 영상을 올리는 구조이다.
CSS
.youtube { background-color: #000; margin-bottom: 30px; position: relative; padding-top: 56.25%; overflow: hidden; cursor: pointer; } .youtube img { width: 100%; top: -16.82%; left: 0; opacity: 0.7; } .youtube .play-button { width: 90px; height: 60px; background-color: #333; box-shadow: 0 0 30px rgba( 0,0,0,0.6 ); z-index: 1; opacity: 0.8; border-radius: 6px; } .youtube .play-button:before { content: ""; border-style: solid; border-width: 15px 0 15px 26.0px; border-color: transparent transparent transparent #fff; } .youtube img, .youtube .play-button { cursor: pointer; } .youtube img, .youtube iframe, .youtube .play-button, .youtube .play-button:before { position: absolute; } .youtube .play-button, .youtube .play-button:before { top: 50%; left: 50%; transform: translate3d( -50%, -50%, 0 ); } .youtube iframe { height: 100%; width: 100%; top: 0; left: 0; } |
'개발' 카테고리의 다른 글
서버의 구분과 프론트 엔드 프레임워크 WAS, DB, 웹서버의 구분과 차이, 프론트엔드 프레임워크가 나온 이유 (0) | 2020.06.19 |
---|---|
소프트웨어 구현 방법론 - Software Inspection & peer review (0) | 2020.06.14 |
소프트웨어 구현 방법론 - 단위 테스트 (0) | 2020.06.14 |
소프트웨어 구현 방법론 - 코드 리팩토링의 방법들 (0) | 2020.06.14 |
PostqreSQL사용하기 (0) | 2020.06.02 |