[RISOLTO] Creazione slider con anteprima con jquery

fradamma

Utente Attivo
28 Set 2012
93
0
0
ciao a tutti.
devo creare per il mio sito uno slider con jquery (senza l'utilizzo di alcun plugin però) che mi permetta in alto di scorrere le immagini e in basso di visualizzare l'immagine selezionata. Al caricamento della pagina deve essere visibile la prima dell'elenco. Come posso fare? Ne approfitto per augurarvi un buon weekend.

PS inserisco sotto in allegato un mockup di quello che vorrei fare.

slider-img.jpg

Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd"  >
<html lang="en">
<head>
<title></title>
<script type="text/javascript" src="script/jquery.js"></script>
<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script type="text/javascript">

	$(document).ready( function(){
		$("a").click( function(event){
			event.preventDefault();
			alert("sono dentro");
		});
	});


</script>

<style type="text/css">
	.container {
	   width: 680px;
	   height: 500px;
	   background: #e3e3e3;
	   position: absolute;
	   left: 0;
	   top: 100px;
	}
	.slider {
	   height: 110px;
	   background: #666666;
	   width: 650px;
	   position: relative;
	   top: 10px;
	   left: 15px;
	}
	.slider a {
	   display: block;
	   cursor: pointer;
	   text-indent: -9999px;
	}
	.arrow_left {
	   background: none repeat scroll 0 0 #0000FF;
	   bottom: 0;
	   height: 30px;
	   left: 0;
	   position: absolute;
	   width: 30px;
	}
	.arrow_right {
	   background: none repeat scroll 0 0 #0000FF;
	   height: 30px;
	   position: absolute;
	   right: 0;
	   top: 0;
	   width: 30px;
	}
	.content_image {
	   width: 350px;
	   height: 350px;
	   position: absolute;
	   top: 140px;
	   left: 165px;
	   background: #ccc;
	}
</style>
</head>
<body>

<div class="container">
	<div class="slider">
		<div class="arrow_left"><a href="#">sinistra</a></div>
<div class="slider_interno">
			<ul>
				<li><img src="img/image1"></li>
				<li><img src="img/image2"></li>
				<li><img src="img/image3"></li>
				<li><img src="img/image4"></li>
				<li><img src="img/image5"></li>
				<li><img src="img/image6"></li>
				<li><img src="img/image7"></li>
				<li><img src="img/image8"></li>
				<li><img src="img/image9"></li>
			</ul>
		</div>
		<div class="arrow_right"><a href="#">destra</a></div>
	</div>
	<div class="content_image"></div>
</div>

</body>
</html>
 
Ciao, prova questo
HTML:
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function(){
        function start() {
            go = setInterval(function(){
                $(".contenuto").prepend($(".contenuto div").last().hide().animate({width: 'toggle'}));
            },1500);
        }        
        $(".contenitore").mouseover(function() {
            clearInterval(go);  
        })
        $(".contenitore").mouseout(function() {
            start();
        });
        $(".contenitore img").click(function() {
            $(".immagine img").attr("src",$(this).attr("src"));
        });
        start();
    })
</script>
<style type="text/css">
    div.contenitore {
        width:288px;
        overflow: hidden;
        padding:4px;
        border: 2px solid #e1e1e1;
    }
    div.contenuto div {
        float: left;
        width: 72px;
        overflow: hidden;
    }
    div.contenitore div img {
        width: 72px;
        cursor: pointer;
    }
    div.contenuto {
        height: 72px;
        margin-left:-72px;
        width: 1000px;
        overflow: hidden;
    }
    div.immagine {
        overflow: hidden;
        width:288px;
        text-align: center;
        border: 2px solid #e1e1e1;
        padding:4px;
        margin-top:2px;
    }
    div.immagine img {
        width: 80%;
    }
</style> 
<div class="contenitore">
    <div class="contenuto">
        <div><img src="../img/1.png" alt=""/></div>
        <div><img src="../img/2.png" alt=""/></div>
        <div><img src="../img/3.png" alt=""/></div>
        <div><img src="../img/4.png" alt=""/></div>
        <div><img src="../img/5.png" alt=""/></div>
        <div><img src="../img/6.png" alt=""/></div>
        <div><img src="../img/7.png" alt=""/></div>
        <div><img src="../img/8.png" alt=""/></div>
        <div><img src="../img/9.png" alt=""/></div>
    </div>
</div> 
<div class="immagine">
    <img src="../img/1.png" alt=""/>
</div>
dovrai adattare CSS e HTML alle tue esigenze
Io ho usato delle immagine larghe 72px, ma , quello che ti interessa dovrebbe essere il codice Jquery
 
Ciao Criric,

faccio alcune considerazioni per meglio capire:

1) da quanto ho capito, il seguente pezzo di script:
Codice:
 $(".contenitore img").click(function() {
            $(".immagine img").attr("src",$(this).attr("src"));
 });

dice che al click sull'immaginetta piccola sopra (dentro .contenitore), l'immagine contenuta nel div ".immagine" di sotto deve cambiare e lo fa andando a riscrivere l'attributo "src" di quella di sotto. Con "$(this)" gli dici di cambiarlo con quello su cui hai cliccato ....giusto?

2) la funzione start():

Codice:
 function start() {
            go = setInterval(function(){
                $(".contenuto").prepend($(".contenuto div").last().hide().animate({width: 'toggle'}));
            },1500);
        }

crea una variabile "go" al cui interno inserisci un setInterval. La funzione passata come primo argomento al setInterval dice di attaccare all'inizio del div contenuto (credo all'interno o no ?!) l'ultimo div interno contenente l'immagine reso "hide". Non capisco solo l'ultima parte....".animate({width: 'toggle'})"...fa il toggle di cosa???

3) con il seguente pezzo:

Codice:
  $(".contenitore").mouseover(function() {
            clearInterval(go);  
        })
        $(".contenitore").mouseout(function() {
            start();
  });

"giochi" con il mousover/mouseout stoppando l'animazione con un clearInterval passandogli come argomento la funzione("go") e facendola ripartire con start() al mouseout. In realtà quello che devo fare io è un tantino differente:

Codice:
<div class="arrow_left"><a href="#">freccia sinistra</a></div>
<div class="contenuto">
        <div><img src="../img/1.png" alt=""/></div>
        <div><img src="../img/2.png" alt=""/></div>
        <div><img src="../img/3.png" alt=""/></div>
        <div><img src="../img/4.png" alt=""/></div>
        <div><img src="../img/5.png" alt=""/></div>
        <div><img src="../img/6.png" alt=""/></div>
        <div><img src="../img/7.png" alt=""/></div>
        <div><img src="../img/8.png" alt=""/></div>
        <div><img src="../img/9.png" alt=""/></div>
</div>
<div class="arrow_right"><a href="#">freccia destra</a></div>

ho bisogno che al click sulla canonica freccia destra o sinistra le immagini scorrono....come si può modificare??? io ci sto dando un'occhiata ma non riesco ad integrare quello che hai fatto tu.

Grazie Criric, sei un grande cmq! :)
 
1)
esattamente

2)
In pratica prende l'ultimo elemento div di ".contenuto" lo nasconde (.hide) e lo riapre con animazione (animate({width: 'toggle'}))

3)
HTML:
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function(){
        
        $("#sin").click(function(){
            $(".contenuto").append($(".contenuto div").first().hide());            
        });
        $("#des").click(function(){
            $(".contenuto").prepend($(".contenuto div").last().hide());
        });
        $(".contenitore img").click(function() {
            $(".immagine img").attr("src",$(this).attr("src"));
        });
        
    })
</script>
<style type="text/css">
    div.move {
        width:288px;
        overflow: hidden;
        padding:4px;
        border: 2px solid #e1e1e1;
    }
    div.contenitore {
        width:288px;
        overflow: hidden;
        padding:4px;
        border: 2px solid #e1e1e1;
        margin-top:2px;
    }
    div.contenuto div {
        float: left;
        width: 72px;
        overflow: hidden;
    }
    div.contenitore div img {
        width: 72px;
        cursor: pointer;
    }
    div.contenuto {
        height: 72px;
        margin-left:-72px;
        width: 1000px;
        overflow: hidden;
    }
    div.immagine {
        overflow: hidden;
        width:288px;
        text-align: center;
        border: 2px solid #e1e1e1;
        padding:4px;
        margin-top:2px;
    }
    div.immagine img {
        width: 80%;
    }
    span#sin {
        float: left;
        margin-left: 22px;
    }
    span#des {
        float:right;
        margin-right: 22px;
    }
    span.b {
        font-weight: bold;
        font-size: 1.5em;
        cursor: pointer;
    }
</style>
<div class="move">
    <span class="b" id="sin"><</span>
    <span class="b" id="des">></span>
</div>
<div class="contenitore">
    <div class="contenuto">
        <div><img src="../img/1.png" alt=""/></div>
        <div><img src="../img/2.png" alt=""/></div>
        <div><img src="../img/3.png" alt=""/></div>
        <div><img src="../img/4.png" alt=""/></div>
        <div><img src="../img/5.png" alt=""/></div>
        <div><img src="../img/6.png" alt=""/></div>
        <div><img src="../img/7.png" alt=""/></div>
        <div><img src="../img/8.png" alt=""/></div>
        <div><img src="../img/9.png" alt=""/></div>
    </div>
</div> 
<div class="immagine">
    <img src="../img/1.png" alt=""/>
</div>
 
Ciao Cricic
lo script che mi hai postato al terzo punto non funziona. L'ho modificato nel seguente modo e sembra funzionare:

Codice:
 $(document).ready(function(){
        
            $("#sin").click(function(){
                $(".contenuto").append($(".contenuto div").first().hide().show());            
            });
            $("#des").click(function(){
                $(".contenuto").prepend($(".contenuto div").last().hide().show());
            });
            $(".contenitore img").click(function() {
                $(".immagine img").attr("src",$(this).attr("src"));
            });
        
        })

Grazie tanteee!!!
 
Hai ragione! la mi idea era quella di dare l'effetto scorrevole sia in avanti che indietro, ma, ad un certo punto mi ero arreso e ti ho postato lo script incompleto
Sono contento che tu abbia modifcato fino a farlo funzionare
cmq ho risolto provalo cosi
Codice:
$(document).ready(function() {        
        $("#sin").click(function(){
            $(".contenuto div").first().animate({width: 'toggle'},500,function(){           
                $(".contenuto div").first().appendTo(".contenuto").show();
            });            
        });
        $("#des").click(function(){
            $(".contenuto").prepend($(".contenuto div").last().hide().animate({width: 'toggle'},500));
        });
        $(".contenitore img").click(function() {
            $(".immagine img").attr("src",$(this).attr("src"));
        });
    })
edit:
ho tolto un comando che non c'entrava
 
Ultima modifica:
Ciao Criric.
Va tutto benissimo nel tuo script, l'unica piccola imperfezione è data dal fatto che se io clicco velocemente su "#sin" (quasi con un doppio click) le immagini sembrano sovrapporsi...non ho capito da che cosa sia dato. Cmq è solamente una fesseria....per il resto è proprio l'effetto che desideravo!
 
Si, me ne ero accorto, basta disabilitare la freccia appena cliccato e riabilitarla finita l'animazione
Ho dovuto cambiare l'elemento da <span> a <input> per poter utilizzare la proprietà disabled
di conseguenza è stato necessario aggiornare il css
riposto lo script completo
HTML:
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {           
        $("#sin").click(function(){
            $(this).prop("disabled",true);
            $(".contenuto div").first().animate({width: 'toggle'},300,function(){           
                $(".contenuto div").first().appendTo(".contenuto").show();
                $("#sin").prop("disabled",false);
            });            
        });
        $("#des").click(function(){
            $(this).prop("disabled",true);
            $(".contenuto").prepend($(".contenuto div").last().hide().animate({width: 'toggle'},300,function(){
                $("#des").prop("disabled",false);
            }));
        });
        $(".contenitore img").click(function() {
            $(".immagine img").attr("src",$(this).attr("src"));
        });
    });
</script>
<style type="text/css">
    html body {
        text-align: center;
    }
    div.move {
        width:288px;
        overflow: hidden;
        padding:4px;
        border: 2px solid #e1e1e1;
    }
    div.contenitore {
        width:288px;
        overflow: hidden;
        padding:4px;
        border: 2px solid #e1e1e1;
        margin-top:2px;
    }
    div.contenuto div {
        float: left;
        width: 72px;
        overflow: hidden;
    }
    div.contenitore div img {
        width: 72px;
        cursor: pointer;
    }
    div.contenuto {
        height: 72px;
        margin-left:-72px;
        width: 1000px;
        overflow: hidden;
    }
    div.immagine {
        overflow: hidden;
        width:288px;
        text-align: center;
        border: 2px solid #e1e1e1;
        padding:4px;
        margin-top:2px;
    }
    div.immagine img {
        width: 80%;
    }
    input#sin {
        float: left;
        margin-left: 22px;
    }
    input#des {
        float:right;
        margin-right: 22px;
    }
    input.b {
        font-weight: bold;
        font-size: 1.5em;
        cursor: pointer;
        border: none;
        background-color: transparent;
    }
</style>
<div class="move">
    <input type="button" class="b" id="sin" value="<"/>
    <input type="button" class="b" id="des" value=">"/>
</div>
<div class="contenitore">
    <div class="contenuto">
        <div><img src="../img/1.png" alt=""/></div>
        <div><img src="../img/2.png" alt=""/></div>
        <div><img src="../img/3.png" alt=""/></div>
        <div><img src="../img/4.png" alt=""/></div>
        <div><img src="../img/5.png" alt=""/></div>
        <div><img src="../img/6.png" alt=""/></div>
        <div><img src="../img/7.png" alt=""/></div>
        <div><img src="../img/8.png" alt=""/></div>
        <div><img src="../img/9.png" alt=""/></div>
    </div>
</div> 
<div class="immagine">
    <img src="../img/1.png" alt=""/>
</div>
 

Discussioni simili