2
respostas

Bug visual na interação

Fiz algo parecido com um slide pra mostrar "destaques" em uma pagina, esse slide deve mostrar 3 imagens, sendo que sempre deve haver uma ocupando 50% da pagina e as outras 2 ocupando 25% cada uma. Chamarei a IMG com 50% de "dAtual", dAtual deveria mudar mudar a cada intervalo curto de tempo (seguindo um fluxo em ordem com em um slide da primeira pra terceira IMG), a mesma também deveria mudar quando o usuário passa o mouse no slide, quando ele passa o mouse em cima em uma IMG ela passa a ser dAtual e pausa o slide, quando o mouse sair de cima o slide continua a partir de dAtual dessa forma o evento que deve interagir com o slide e não apenas mudar o tamanho das coisas, deu um trabalhinho, mas ta funcionando com um pequeno bug visual a partir do seguinte código:

HTML

<div class="destaques">
         <ul class="listaDestaques">
            <li>
               <img id="destaque-1" src="../imgs/destaque_1.png" alt="Destaque 1">
            </li>
            <li>
               <img id="destaque-2" src="../imgs/destaque_2.png" alt="Destaque 2">
            </li>
            <li>
               <img id="destaque-3" src="../imgs/destaque_3.png" alt="Destaque 3">
            </li>
         </ul>
</div> -->

CSS

/*Destaques*/
.destaques {
    overflow: hidden;
    clear: both;
    position: relative;

 }
 .listaDestaques{
    margin: 0;
    list-style-type: none;
    width: 100%;
    height: 600px;
    position: relative;
    left: -40px;
 }
 .destaque-maior {
    transition: width 0.5s;
    width: 50%;
    height: 600px;
    object-fit: cover;
    float: left;

 }
 .destaque-menor {
    transition: width 0.5s;
    width: 25%;
    height: 600px;
    object-fit: cover;
    float: left;
 }

Javascript

let destaques = {
    d1: document.querySelector("#destaque-1"),
    d2: document.querySelector("#destaque-2"),
    d3: document.querySelector("#destaque-3"),
    dFluxo: 1, //Booleano
    dAtual: 0,
    dNext_1: 1,
    dNext_2: 2
}

let focus = [destaques.d1, destaques.d2, destaques.d3];

function adClass(elemento, classe) {
    elemento.classList.add(classe);
    return 0;
}
function rmClass(elemento, classe) {
    elemento.classList.remove(classe);
    return 0;
}
function attDestaque(newValue) {
    while (destaques.dAtual != newValue) {
        destaques.dAtual = contador(destaques.dAtual, focus.length);
        destaques.dNext_1 = contador(destaques.dNext_1, focus.length);
        destaques.dNext_2 = contador(destaques.dNext_2, focus.length);
    }

    adClass(focus[destaques.dAtual], "destaque-maior");
    rmClass(focus[destaques.dAtual], "destaque-menor");

    adClass(focus[destaques.dNext_1], "destaque-menor");
    rmClass(focus[destaques.dNext_1], "destaque-maior");
    adClass(focus[destaques.dNext_2], "destaque-menor");
    rmClass(focus[destaques.dNext_2], "destaque-maior");
}
function destaqueOver(d, dPosition) { //dPosition = posição da do destaque no vetor "focus"
    let dElement = dPosition;
    d.addEventListener("mouseover", function () {
            attDestaque(dElement);
            destaques.dFluxo = 0;
    });
    d.addEventListener("mouseleave", function () {
            destaques.dFluxo = 1;
    });
    dAtual = d;
    return 0;
}
function contador(variavel, limite) {
    if (variavel < (limite - 1)) {
        variavel++
        //console.log("'true'" + variavel + " delay test");
    } else {
        variavel = 0;
        //console.log("'false' " + variavel + " delay test");
    }
    return variavel;
};
adClass(destaques.d1, "destaque-maior");
adClass(destaques.d2, "destaque-menor");
adClass(destaques.d3, "destaque-menor");

destaqueOver(destaques.d1, 0);
destaqueOver(destaques.d2, 1); //passar a posição do focus!
destaqueOver(destaques.d3, 2);

setInterval(function () {
    if (destaques.dFluxo) {
        destaques.dAtual = contador(destaques.dAtual, focus.length);
        destaques.dNext_1 = contador(destaques.dNext_1, focus.length);
        destaques.dNext_2 = contador(destaques.dNext_2, focus.length);

        adClass(focus[destaques.dAtual], "destaque-maior");
        rmClass(focus[destaques.dAtual], "destaque-menor");

        adClass(focus[destaques.dNext_1], "destaque-menor");
        rmClass(focus[destaques.dNext_1], "destaque-maior");
        adClass(focus[destaques.dNext_2], "destaque-menor");
        rmClass(focus[destaques.dNext_2], "destaque-maior");
    }
}, 3500);
2 respostas

/////

Oi Jorbralyson tudo bem?

Consegue colocar, por gentileza, as imagens no imgur.com ou outro site. Tentei simular com umas imagens aleatórias e não to conseguindo perceber o problema.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software