Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Seletores

Estou praticando tentando criar um slide-show (carousel) (código abaixo):


<ul class="slide-canvas wrap">
        <li class="slide active" data-value="0">
            <figure>
                <img class="img-slide" src="img/slider/img-slide0.png">
                <figcaption class="img-figcap">Your Text 0</figcaption>
            </figure>
        </li>
        <li class="slide" data-value="1">
            <figure>
                <img class="img-slide" src="img/slider/img-slide1.png">
                <figcaption class="img-figcap">Your Text 1</figcaption>
            </figure>
        </li>
        <li class="slide" data-value="2">
            <figure>
                <img class="img-slide" src="img/slider/img-slide2.png">
                <figcaption class="img-figcap">Your Text 2</figcaption>
            </figure>
        </li>
        <li class="slide" data-value="3">
            <figure>
                <img class="img-slide" src="img/slider/img-slide3.png">
                <figcaption class="img-figcap">Your Text 3</figcaption>
            </figure>
        </li>
</ul>

    <ul class="controls-slide">
            <li class="control-slide control-ative" data-value="0"></li>
            <li class="control-slide" data-value="1"></li>
            <li class="control-slide" data-value="2"></li>
            <li class="control-slide" data-value="3"></li>
    </ul>
function clearControl(){
    $('.control-slide').removeClass('control-ative');
}

var controls = $('.control-slide');
controls.each(function(){

    var control = $(this);
    control.on('click', function(){

        clearControl()
        $(this).addClass('control-ative');
        console.log($(this).data('value'));
    })
})

Como veem, marquei o HTML com atributo "data-value" nas "li" que são o conteúdo do slide, e nos controles, assim quando determinado controle é clicado ele seleciona a "li"(slide) pelo "data-value", sempre resolvia assim esse problema com java script puro, porem ficava um código enorme, isso sem animações de "Fade In ou Fade Out", então qndo colocava... Estou tentando aplicar da maneira que vi nas aulas porem não encontro na documentação do Jquery um seletor de data semelhante ao "dataset" do JS puro, ou se existem outras maneiras mais praticas de manipular esse slide com as funções de animações e toggles do Jquery...

9 respostas

Boa noite, Luciano! Tudo bem? =)

Quando você faz a chamada para a função clearControl() você, aparentemente, se esqueceu de um ponto-e-vírgula (;). =)

Tenta colocar ele aí e ver se funciona. Se não funcionar só avisar aqui que eu dou mais uma olhadinha no código. =)

Fábio

o código ta funcionando aki, porem ali no bloco que captura o click não encontro uma maneira de selecionar a 'li'(slide) pelo data-value dela para efetuar um "slide.toggle" por exemplo... como ve no código abaixo:

var controls = $('.control-slide');
controls.each(function(){

    var control = $(this);
    control.on('click', function(){

        clearControl();
        $(this).addClass('control-ative');
        console.log($(this).data('value'));
        var imgThis = $(this).data('value');

        document.querySelectorAll('.slide')[imgThis].classList.add('active');
    })
})

repara que ali no final quando quero que o slide a ser exibido seja capturado, preciso usar JS comun e dai não tem como usar as animações do Jquery, teria q criar elas manualmente, queria saber se consigo selecionar o data-value do slide atual, baseado no value do control clicado, que é definido nesta linha:

var imgThis = $(this).data('value');

olhei as funções 'data()' na documentação do Jquery e não consegui aplicar nenhuma delas...

solução!

Luciano para pegar os atributos data- você pode fazer:

JS Puro:

let $obj = document.querySelector('[data-value]');
let dataValue = obj.dataset.value;

jQuery:

let $obj = jQuery('[data-value]');
let dataValue = $obj.data('value');

Espero ter ajudado.

Consigo pegar o data, o que não consigo é selecionar a posição do slide dentro do array apartir do numero q o data retorna... Por exemplo a linha abaixo não é funcional pois o seletor do 'slide' não funciona...

var imgThis = $(this).data('value');
$('.slide')[imgThis].fadeIn('slow');

A minha dúvida é se consigo selecionar o slide atual a partir do valor que o data-value do controle clicado retorna... sempre resolvia esse problema desta maneira com Js Puro, porem como disse antes, o fadeIn ali teria que ser feito manualmente e era isso q eu queria evitar..

acho que terei de resolver esse problema com outra lógica para usar os efeitos do Jquery :(

O que você esta querendo desenvolver ?

um slide-show, semelhante aquele (carousel) do bootstrap... Com JS puro até consigo mas queria usar o Jquery pelas animações pra não fazer manualmente... :)

Luciano, acabei esquecendo do tópico, conseguiu fazer ? Se não eu monto um código aqui e lhe mando como exemplo.