Marcação
A sessão abaixo irá renderizar os cards que serão criados via Java Script:
HTML
<section id="scrollSection" class="scroll">
</section>
CSS
.scroll {
background-color: black;
padding: 50px;
overflow-x: auto;
scroll-behavior: smooth;
white-space: nowrap;
}
Dentro da sessão abaixo teremos o painel que irá renderizar os botões que controlaram o Scroll Lateral do elemento scrollSection
:
HTML
<section id="panel" class="panel">
<button id="back" class="btn">back</button>
<button id="next" class="btn">next</button>
</section>
CSS
.panel {
display: flex;
justify-content: space-between;
}
.btn {
border-radius: 8px;
background-color: rgb(168, 103, 228);
padding: 8px;
width: 50%;
}
Java Script
Dados:
A constante data
armazenará as informações dos Cards a serem criados. Aqui trabalharemos apenas com as Cores:
const data = [
{
color: 'red',
},
{
color: 'yellow',
},
{
color: 'green',
},
{
color: 'blue',
},
{
color: 'white',
},
{
color: 'orange',
},
{
color: 'gray',
},
{
color: 'brown',
},
{
color: 'purple',
},
];
Criando Cards:
A função createCard
Cria um elemento div
com a classe cards
e irá inserir o Card dentro do elemento scrollSection
:
const createCard = (color) => {
const scrollSection = document.getElementById('scrollSection');
const div = document.createElement('div');
div.className = 'cards';
div.style.backgroundColor = color;
scrollSection.appendChild(div);
};
CSS:
.cards {
width: 200px;
height: 200px;
border-radius: 15px;
margin: 30px;
display: inline-block;
}
Podemos usar o map
para mapear o array e para cada Objeto dentro dele executar a função createCard
passando como parametro o valor dentro da chave color
do Objeto:
data.map(object => createCard(object.color));
Painel de controle:
Agora iremos configurar o addEventListener
com duas conticionais referentes aos botões do painel.
Se o elemento clicado contém o id
next a scrollSection
irá se mover 500px
para direita →
Se o id
for back se movimentará 500px
para esquerda ←
addEventListener('click', (event) => {
if (event.target.id === 'next') {
document.getElementById('scrollSection').scrollBy(500, 0);
};
if (event.target.id === 'back') {
document.getElementById('scrollSection').scrollBy(-500, 0);
};
})
Bônus
Sessão responsiva com Media Queries:
A sessão scrollSection
só terá Scroll Lateral e o Painel só será visivel em telas Menores de 500px
de largura
Para isso retira o white-space: nowrap;
da classe scroll
e adicione visibility: hidden;
à classe panel
,
E crie um Media Query com as seguintes configurações:
@media screen and (max-width: 500px) {
.scroll {
white-space: nowrap;
}
.panel {
visibility: visible;
}
}
Top comments (0)