Spotify Clone Coding - (1)

세렌디·2023년 1월 2일
0

SpotifyClone

목록 보기
1/2
post-thumbnail

나는 모든 노래를 거의 스포티파이에서 다 듣는다. 유튜브에서 가끔 듣기도 하지만
아무래도 스포티파이가 개인적으로 편하다 보니 스포티파이에서 대체적으로 모든 노래를 듣는 편이다.
스포티파이를 듣던 중 갑작스럽게 클론코딩이 하고 싶어져서 하는 클론 코딩이다.
클론코딩이라고 해서 무조건 같게 만들 생각은 아니다.

Spotify공식 홈페이지를 참고해서 만들었다.
https://www.spotify.com/kr-ko/

처음에는 기본이 되는 헤더부터 만들어 주었다.


function goSign() {
	window.location.href = 'https://www.spotify.com/kr-ko/signup';
}

function Logout() {
        window.location.replace("/")
}

function headerclick() {
        window.location.replace("/")
}

<div className='mainheader'>
            <div className='spotifyheader'>
                <img src='images/logo.png' className='spotifylogo' onClick={headerclick}></img>
                <div className='headtext'>
                    <text>프리미엄</text>
                    <text>지원</text>
                    <text>다운로드 하기</text>
                    <text className='bar'>|</text>
                    <text>회원가입하기</text>
                    <text>로그인하기</text>
                </div>
            </div>
        </div>

Header.js의 코드는 다음과 같다.
처음에는 기본적인 구성만 해줄 것이기 때문에, img태그에 스포티파이 로고를 넣어주고 클릭하면
headerclick이라는 함수가 동작하여 새로고침 해주는 역할을 하며, 나머지는 text들로 처리해주었다.

.mainheader {
    background-color: black!important;
    width: 100%;
    height: 100px;
    z-index: 1;
}
.spotifylogo {
    width: 150px;
    margin-top: 25px;
    margin-left: -50%;
    cursor: pointer;
}
.headtext {
    font-size: 15px;
    font-weight: bold;
    color: white;
    margin-top: -35px;
    margin-left: 40%;
    text {
        padding-left: 5%;
        cursor: pointer;
    }
    :hover {
        color: #1ed760;
    }
    .userimg {
        position: absolute;
        margin-left: 0px;
        margin-top: -10px;
        height: 40px;
        border-radius: 30px;
        width: 40px;
    }
    .users {
        margin-left: 50px;
    }
    .bar {
        pointer-events: none;
    }
}

이건 Header.scss의 코드이다.
처음에 헤더의 배경색이 안나왔던 적이 있어서, import선언을 해주었었다. 그리고 z-index를 1로 하여 제일 위에 나타나도록 하였다. 스포티파이 로고와 프리미엄, 지원, 다운로드 하기 등의 텍스트의 위에 마우스를 올리면 마우스 커서의 모양을 바꾸어 주는 cursor: pointer;을 추가해주었다.
또한 텍스트는 마우스를 올려놓을 시 스포티파이의 색 #1ed760색으로 텍스트의 색이 변경되도록 해주었다.
그리고 bar는 hover 이벤트나 cusor이벤트가 작동되면 안되는 역할이므로 pointer-events:none을 해주었다.
이렇게 해주면 다음과 같은 헤더가 완성된다.

다음은 메인화면이다.

import React from 'react';
import '../styles/Main.scss'
import { useNavigate } from 'react-router-dom';
import Header from './Header/Header'
import TextTransition, { presets } from "react-text-transition";

export default function MainPage() {
    const nav = useNavigate();
    function gopolicy() {
        nav('/user-guidelines')
    }
    function goGoogle() {
        window.location.href = 'https://play.google.com/store/apps/details?id=com.spotify.music'
    }
    function goApple() {
        window.location.href = 'https://apps.apple.com/kr/app/spotify-discover-new-music/id324684580'
    }
    const [index, setIndex] = React.useState(0);
    React.useEffect(() => {
        const intervalId = setInterval(() =>
            setIndex(index => index + 1),
            1500 // every 3 seconds
        );
        return () => clearTimeout(intervalId);
    }, []);
    const TEXTS = [
        "손 쉬운 음악감상",
        "언제 어디서나",
        "즐길 수 있는",
        "나보다 나를 더",
        "잘 아는",
        "스포티파이."
    ];
    return (
        <div>
            <Header />
            <div className='mainbackground'>
                <video loop autoPlay muted id="bg-video">
                    <source src='video/spotify.mp4' type="video/mp4" />
                </video>
                    <TextTransition springConfig={presets.molasses} className='shead1'>
                        {TEXTS[index % TEXTS.length]}
                    </TextTransition>
            </div>
            <div className='subackground'>
            <video loop autoPlay muted id="bg-video2">
                    <source src='video/spotify2.mp4' type="video/mp4" />
            </video>
            <h1 className='shead2'>지금. 당신의 손에서 시작되는 플레이 리스트.</h1>
            <p className='stext1'>1개의 모바일 기기에서 7일 동안 무료로 Spotify Premium 멤버십을 이용해보세요. 결제 세부 정보는 필요하지 않습니다.</p>
                <div>
                    <img src='images/google.png' className='google' alt='goolgle' onClick={goGoogle}></img>
                    <img src='images/apple.png' className='apple' alt='apple' onClick={goApple}></img>
                </div>
                <text className='policy' onClick={gopolicy}>약관</text>
                <text>이 적용됩니다. Premium을 이미 이용해 보셨거나 다른 기기로 이용하시려는 경우 이 프로모션을 이용할 수 없습<br />니다. 7일 후에도 계속 Spotify 서비스를 이용하려면 Premium을 구독해야 합니다.</text>
            </div>
        </div>
    )
}

Main.js의 코드는 다음과 같다. Header.js에서 만들었던 Header를 Import해주었다.
그리고 메인화면은 스포티파이 공식 홈페이지와 똑같이 만드려니까 뭔가 밋밋하고 재미없어서 내 나름대로 바꿔보았다.
react-text-transition이라는 것을 불러와서 메인화면 뒤에 영상이 재생될 동안 텍스트가 자동으로 바뀌는 라이브러리를 추가하였다.
그리고 구글, 애플 스토어로 이동시켜주는 goGoogle, goApple함수도 만들어 주었다.
약관 같은 정보들은 약관을 클릭하면 볼 수 있게 react-router-dom의 useNavigate를 사용해서 약관 이라는 text를 클릭하면 이동될 수 있게 만들었다.

.mainbackground {
    width: 100%;
    height: 600px;
    padding-top: 7%;
    z-index: 1;
    color: white;
    #bg-video {
        position: absolute;
        width: 100%;
        height: 850px;
        margin-top: -7%;
        object-fit: cover;
        margin-left: -50%;
        z-index: -1;
    }
    .shead1 {
        margin-left: 5%;
        margin-top: 50px;
        font-size: 80px;
        font-weight: bold;
        text {  
            color: #1ed760;;
        }
    }
    
}
.subackground {
    width: 100%;
    height: 1000px;
    margin-top: 6%;
    color: white;
    #bg-video2 {
        position: absolute;
        width: 100%;
        height: 1000px;
        object-fit: cover;
        margin-left: -50%;
        z-index: -1;
    }
.shead2 {
    padding-top: 150px;
    font-size: 80px;
}
.stext1 {
    font-size: 28px;
}
.google {
    margin-top: 175px;
    width: 250px;
    cursor: pointer;
}
.apple {
    margin-left: -30px;
    width: 250px;
    cursor: pointer;
}
.policy {
    margin-top: 60px;
    text-decoration: underline;
    cursor: pointer;
}
}

이 코드는 Main.scss이다. 딱히 특별할 것은 없으며 영상위에 텍스트가 보이도록 영상의 z-index를 -1해주었다는 점이 있겠다.

이렇게 해주면 어느정도 볼만한 메인 페이지가 완성된다.

다음은 동영상을 어떻게 업로드 해야할지 몰라서 GIF로 만든 영상이다.

다음에 이어서 하도록 하겠다.

profile
당당하게 자신을 개발자라고 할 수 있는 사람이 될 때 까지

0개의 댓글