純粋なHTML、CSS、JSでディズニープラスクローンを作成する方法
62651 ワード
こんにちは、今日、私たちは、どのように簡単にディズニープラスUIのクローンを作成することができますHTML、CSSとJSだけを使用して表示されます.他のライブラリはありません.また、どのように無限のスライダー効果を作ることができます.それは私にコードに2 - 3時間かかりました.
私たちのクローンは、元のディズニープラスのウェブサイトに非常に似ています.ホームページ(ホームページ)のみです.それはNavbarと検索ボックスにディズニー+と同じクールなクリック効果で、そして、それも無限または無限の影響でスライダーまたはカルーセルを持ちます.私が最初に作るのはとても難しかった.その後、映画カードもあります.素晴らしいカードホバー効果で.そして、我々はずっと持っている.
デモを参照するか、完全なコーディングチュートリアルビデオを説明してください.下記のチュートリアルを見ることができます.
ビデオチュートリアル
それで、より多くの時間を浪費することなく、これをコード化する方法を見ましょう.
コード
コードを書く前に.それはノードのアプリではありませんが、少なくとも私たちはフォルダ構造を見る必要があります.
Download Template
ファイル名が表示されます
それでは、ウェブページをコード化しましょう.
ウェブページ.
から始める
まずはNavbarを作成します.
出力
さあスライダーを作りましょう.我々は、これらのスライドをJSで作成しますが、スタイリング目的のためだけにHTMLで1つを作成します.
出力
今すぐスライドをコメントすることができます.我々はスタイリングを行うとして.
そして、このスライダー作業を作成します.Watch this このスライダーの作業コンセプトを理解する.
内部
すべてのこれらの要素を作成した後.HTML構造を形成するためにこれらの要素を追加/添付します.
お互いに追加の要素を行った後.すぐにクラス名を設定し、イメージのソースを設定します.
我々は、スライダを作成完了です.しかし、我々のスライダは、なぜ我々は左に最初のスライドをシフトする必要が動作しません.そのためには関数の最後に追加します.
出力
そしてホバーカードでビデオを再生する.コード.
そして最後のこと.カードを作りましょう.
出力
私たちはほとんど終わった.最後にしなければならないのは、このカードスライダーを動作させることです.そのために
それで、それです.私は、あなたが各々とすべてを理解したことを望みます.あなたが疑いを持っているか、私が何かを逃したならば、私にコメントで知らせさせました.
あなたが役に立つかもしれない記事
あなたが私のYouTubeチャンネルを予約することができるならば、私は本当に感謝します.私は素晴らしいWebコンテンツを作成します.
読書ありがとう.
私たちのクローンは、元のディズニープラスのウェブサイトに非常に似ています.ホームページ(ホームページ)のみです.それはNavbarと検索ボックスにディズニー+と同じクールなクリック効果で、そして、それも無限または無限の影響でスライダーまたはカルーセルを持ちます.私が最初に作るのはとても難しかった.その後、映画カードもあります.素晴らしいカードホバー効果で.そして、我々はずっと持っている.
デモを参照するか、完全なコーディングチュートリアルビデオを説明してください.下記のチュートリアルを見ることができます.
ビデオチュートリアル
I appreciate if you can support me by subscribing my youtube channel.
それで、より多くの時間を浪費することなく、これをコード化する方法を見ましょう.
コード
コードを書く前に.それはノードのアプリではありませんが、少なくとも私たちはフォルダ構造を見る必要があります.
Download Template
ファイル名が表示されます
data.js
. このファイルには、ムービースライダーデータが含まれています.下記をご覧ください.let movies = [
{
name: 'falcon and the winter soldier',
des: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Velit porro et veniam excepturi, eaque voluptatem impedit nulla laboriosam facilis ut laboriosam libero!',
image: 'images/slider 2.PNG'
},
{
name: 'loki',
des: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Velit porro et veniam excepturi, eaque voluptatem impedit nulla laboriosam facilis ut laboriosam libero!',
image: 'images/slider 1.PNG'
},
{
name: 'wanda vision',
des: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Velit porro et veniam excepturi, eaque voluptatem impedit nulla laboriosam facilis ut laboriosam libero!',
image: 'images/slider 3.PNG'
},
/// and so on
]
場合は、開始データを参照してください.あなたは私たちのslide-1
リストの2番目の数です.それはなぜです.そのためです.私たちのスライダーは、一度に3つのスライドを持っており、我々は中心にあるアクティブなスライドをします.これは、最初にスライドデータから始めるときを意味します.我々の活発なスライドまたは最初のスライドは、中央にあります.私は、これが意味することを望みます.しない場合は、より良い理解のためのビデオチュートリアルを見る.それでは、ウェブページをコード化しましょう.
ウェブページ.
から始める
index.html
. 基本的なHTML構造を書いて、CSSとJSファイルをリンクしてください.あなたが加えることを確認してくださいdata.js
前にファイルapp.js
. データにアクセスできるようにapp.js
ファイル.まずはNavbarを作成します.
<nav class="navbar">
<img src="images/logo.png" class="brand-logo" alt="">
<ul class="nav-links">
<li class="nav-items"><a href="#">TV</a></li>
<li class="nav-items"><a href="#">movies</a></li>
<li class="nav-items"><a href="#">sports</a></li>
<li class="nav-items"><a href="#">premium</a></li>
</ul>
<div class="right-container">
<input type="text" class="search-box" placeholder="search">
<button class="sub-btn">subscribe</button>
<a href="#" class="login-link">login</a>
</div>
</nav>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
width: 100%;
background: #0c111b;
position: relative;
font-family: roboto, sans-serif;
}
.navbar{
width: 100%;
height: 80px;
position: fixed;
top: 0;
left: 0;
padding: 0 4%;
background: #0c111b;
z-index: 9;
display: flex;
align-items: center;
}
.brand-logo{
height: 70px;
}
.nav-links{
margin-top: 10px;
display: flex;
list-style:none;
}
.nav-items a{
text-decoration: none;
margin-left: 20px;
text-transform: capitalize;
color: #fff;
opacity: 0.9;
}
.right-container{
display: block;
margin-left: auto;
}
.search-box{
border: none;
border-bottom: 1px solid #aaa;
background: transparent;
outline: none;
height: 30px;
color:#fff;
width: 250px;
text-transform: capitalize;
font-size: 16px;
font-weight: 500;
transition: .5s;
}
.search-box:focus{
width: 400px;
border-color: #1f80e0;
}
.sub-btn{
background: #1f80e0;
height: 30px;
padding: 0 20px;
color: #fff;
border-radius: 5px;
border: none;
outline: none;
text-transform: uppercase;
font-weight: 700;
font-size: 12px;
margin: 0 10px;
}
.login-link{
color: #fff;
opacity: 0.9;
text-transform: uppercase;
font-size: 15px;
font-weight: 700;
text-decoration: none;
}
出力
さあスライダーを作りましょう.我々は、これらのスライドをJSで作成しますが、スタイリング目的のためだけにHTMLで1つを作成します.
div class="carousel-container">
<div class="carousel">
<div class="slider">
<div class="slide-content">
<h1 class="movie-title">loki</h1>
<p class="movie-des">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Suscipit saepe eius ratione nostrum mollitia explicabo quae nam pariatur. Sint, odit?</p>
</div>
<img src="images/slider 1.PNG" alt="">
</div>
</div>
</div>
.carousel-container{
position: relative;
width: 100%;
height: 450px;
padding: 20px 0;
overflow-x: hidden;
margin-top: 80px;
}
.carousel{
display: flex;
width: 92%;
height: 100%;
position: relative;
margin: auto;
}
.slider{
flex: 0 0 auto;
margin-right: 30px;
position: relative;
background: rgba(0, 0, 0,0.5);
border-radius: 5px;
width: 100%;
height: 100%;
left: 0;
transition: 1s;
overflow: hidden;
}
.slider img{
width: 70%;
min-height: 100%;
object-fit: cover;
display: block;
margin-left: auto;
}
.slide-content{
position: absolute;
width: 50%;
height: 100%;
z-index: 2;
background: linear-gradient(to right, #030b17 80%, #0c111b00);
color: #fff;
}
.movie-title{
padding-left: 50px;
text-transform: capitalize;
margin-top: 80px;
}
.movie-des{
width: 80%;
line-height: 30px;
padding-left: 50px;
margin-top: 30px;
opacity: 0.8;
}
出力
今すぐスライドをコメントすることができます.我々はスタイリングを行うとして.
そして、このスライダー作業を作成します.Watch this このスライダーの作業コンセプトを理解する.
内部
app.js
. カルーセル要素を選択し、すべてのスライドを格納する空の配列を作成します.const carousel = document.querySelector('.carousel');
let sliders = [];
let slideIndex = 0; // to track current slide index.
関数を作成するcreateSlide
スライドを作成するには.const createSlide = () => {
if(slideIndex >= movies.length){
slideIndex = 0;
}
// creating DOM element
let slide = document.createElement('div');
let imgElement = document.createElement('img');
let content = document.createElement('div');
let h1 = document.createElement('h1');
let p = document.createElement('p');
}
この関数では.我々は次の増加または設定しているslideIndex
いくつかのif/else条件で.そして、その後、我々は我々が我々のスライドのために必要とするDOM要素をつくっています.これらのすべての要素は私たちが持っていたのと全く同じですindex.html
.すべてのこれらの要素を作成した後.HTML構造を形成するためにこれらの要素を追加/添付します.
{
// attaching all elements
imgElement.appendChild(document.createTextNode(''));
h1.appendChild(document.createTextNode(movies[slideIndex].name));
p.appendChild(document.createTextNode(movies[slideIndex].des));
content.appendChild(h1);
content.appendChild(p);
slide.appendChild(content);
slide.appendChild(imgElement);
carousel.appendChild(slide);
}
this code is inside
createSlide
function.
お互いに追加の要素を行った後.すぐにクラス名を設定し、イメージのソースを設定します.
{
// setting up image
imgElement.src = movies[slideIndex].image;
slideIndex++;
// setting elements classname
slide.className = 'slider';
content.className = 'slide-content';
h1.className = 'movie-title';
p.className = 'movie-des';
sliders.push(slide);
}
そして最後にslide
内部sliders
配列.我々は、スライダを作成完了です.しかし、我々のスライダは、なぜ我々は左に最初のスライドをシフトする必要が動作しません.そのためには関数の最後に追加します.
{
if(sliders.length){
sliders[0].style.marginLeft = `calc(-${100 * (sliders.length - 2)}% - ${30 * (sliders.length - 2)}px)`;
}
}
そして今、あなたはスライドを作成します.あなたが私たちのスライダの作品が表示されます.for(let i = 0; i < 3; i++){
createSlide();
}
setInterval(() => {
createSlide();
}, 3000);
我々は、スライダーで行われます.今すぐビデオカードを作成します.<div class="video-card-container">
<div class="video-card">
<img src="images/disney.PNG" class="video-card-image" alt="">
<video src="videos/disney.mp4" mute loop class="card-video"></video>
</div>
<div class="video-card">
<img src="images/pixar.PNG" class="video-card-image" alt="">
<video src="videos/pixar.mp4" mute loop class="card-video"></video>
</div>
<div class="video-card">
<img src="images/marvel.PNG" class="video-card-image" alt="">
<video src="videos/marvel.mp4" mute loop class="card-video"></video>
</div>
<div class="video-card">
<img src="images/star-wars.PNG" class="video-card-image" alt="">
<video src="videos/star-war.mp4" mute loop class="card-video"></video>
</div>
<div class="video-card">
<img src="images/geographic.PNG" class="video-card-image" alt="">
<video src="videos/geographic.mp4" mute loop class="card-video"></video>
</div>
</div>
.video-card-container{
position: relative;
width: 92%;
margin: auto;
height: 10vw;
display: flex;
margin-bottom: 20px;
justify-content: space-between;
}
.video-card{
position: relative;
min-width: calc(100%/5 - 10px);
width: calc(100%/5 - 10px);
height: 100%;
border-radius: 5px;
overflow: hidden;
background: #030b17;
}
.video-card-image,
.card-video{
width: 100%;
height: 100%;
object-fit: cover;
}
.card-video{
position: absolute;
}
.video-card:hover .video-card-image{
display: none;
}
出力
そしてホバーカードでビデオを再生する.コード.
/// video cards
const videoCards = [...document.querySelectorAll('.video-card')];
videoCards.forEach(item => {
item.addEventListener('mouseover', () => {
let video = item.children[1];
video.play();
})
item.addEventListener('mouseleave', () => {
let video = item.children[1];
video.pause();
})
})
This effect will only work if user click on your site first. If use did not click on your page first then the video will not play because of the google chrome policy.
そして最後のこと.カードを作りましょう.
<h1 class="title">recommended for you</h1>
<div class="movies-list">
<button class="pre-btn"><img src="images/pre.png" alt=""></button>
<button class="nxt-btn"><img src="images/nxt.png" alt=""></button>
<div class="card-container">
<div class="card">
<img src="images/poster 1.png" class="card-img" alt="">
<div class="card-body">
<h2 class="name">movie name</h2>
<h6 class="des">Lorem ipsum dolor sit amet consectetur.</h6>
<button class="watchlist-btn">add to watchlist</button>
</div>
</div>
...20+ more cards
</div>
</div>
.. repeat this whole block 3-4 times with different card content
.title{
color: #fff;
opacity: 0.9;
padding-left: 4%;
text-transform: capitalize;
font-size: 22px;
font-weight: 500;
}
.movies-list{
width: 100%;
height: 220px;
position: relative;
margin: 10px 0 20px;
}
.card-container{
position: relative;
width: 92%;
padding-left: 10px;
height: 220px;
display: flex;
margin: 0 auto;
align-items: center;
overflow-x: auto;
overflow-y: visible;
scroll-behavior: smooth;
}
.card-container::-webkit-scrollbar{
display: none;
}
.card{
position: relative;
min-width: 150px;
width: 150px;
height: 200px;
border-radius: 5px;
overflow: hidden;
margin-right: 10px;
transition: .5s;
}
.card-img{
width: 100%;
height: 100%;
object-fit: cover;
}
.card:hover{
transform: scale(1.1);
}
.card:hover .card-body{
opacity: 1;
}
.card-body{
opacity: 0;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 2;
background: linear-gradient(to bottom, rgba(4, 8, 15, 0), #192133 90%);
padding: 10px;
transition: 0.5s;
}
.name{
color: #fff;
font-size: 15px;
font-weight: 500;
text-transform: capitalize;
margin-top: 60%;
}
.des{
color: #fff;
opacity: 0.8;
margin: 5px 0;
font-weight: 500;
font-size: 12px;
}
.watchlist-btn{
position: relative;
width: 100%;
text-transform: capitalize;
background: none;
border: none;
font-weight: 500;
text-align: right;
color: rgba(255, 255, 255, 0.5);
margin: 5px 0;
cursor: pointer;
padding: 10px 5px;
border-radius: 5px;
}
.watchlist-btn::before{
content: '';
position: absolute;
top: 0;
left: -5px;
height: 35px;
width: 35px;
background-image: url(images/add.png);
background-size: cover;
transform: scale(0.4);
}
.watchlist-btn:hover{
color: #fff;
background: rgba(255, 255, 255, 0.1);
}
.pre-btn,
.nxt-btn{
position: absolute;
top: 0;
width: 5%;
height: 100%;
z-index: 2;
border: none;
cursor: pointer;
outline: none;
}
.pre-btn{
left: 0;
background: linear-gradient(to right, #0c111b 0%, #0c111b00);
}
.nxt-btn{
right: 0;
background: linear-gradient(to left, #0c111b 0%, #0c111b00);
}
.pre-btn img,
.nxt-btn img{
width: 15px;
height: 20px;
opacity: 0;
}
.pre-btn:hover img,
.nxt-btn:hover img{
opacity: 1;
}
出力
私たちはほとんど終わった.最後にしなければならないのは、このカードスライダーを動作させることです.そのために
app.js
再び.// card sliders
let cardContainers = [...document.querySelectorAll('.card-container')];
let preBtns = [...document.querySelectorAll('.pre-btn')];
let nxtBtns = [...document.querySelectorAll('.nxt-btn')];
cardContainers.forEach((item, i) => {
let containerDimensions = item.getBoundingClientRect();
let containerWidth = containerDimensions.width;
nxtBtns[i].addEventListener('click', () => {
item.scrollLeft += containerWidth - 200;
})
preBtns[i].addEventListener('click', () => {
item.scrollLeft -= containerWidth + 200;
})
})
そして、我々はされます.それで、それです.私は、あなたが各々とすべてを理解したことを望みます.あなたが疑いを持っているか、私が何かを逃したならば、私にコメントで知らせさせました.
あなたが役に立つかもしれない記事
読書ありがとう.
Reference
この問題について(純粋なHTML、CSS、JSでディズニープラスクローンを作成する方法), 我々は、より多くの情報をここで見つけました https://dev.to/kunaal438/how-to-create-disney-plus-clone-for-beginner-in-2021-html-css-js-m3pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol