Creare uno Horizontal Scroll Panel di immagini e testi con jQuery

By Andrea Marchetti - 19 Giu , 2014

Creare uno Horizontal Scroll Panel di immagini e testi con jQuery
Horizontal Scroll Panel Responsive

Oggi vediamo come costruire uno slide panel con jquery e i css per mostrare contenuti in maniera veloce e accattivante.

Il concept è quello di creare una bottom bar che allo stato hover si “apre” mostrando dei contenuti in dei box. Se questi box (affiancati lateralmente) occupano di più della larghezza dello schermo la barra scorre alla direzione del mouse.

HTML

Come prima cosa creiamo una pagina html con la struttura necessaria:

<!DOCTYPE html>
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>Slider Responsive</title>
<!-- Mobile viewport optimized: j.mp/bplateviewport -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link href="stile.css" rel="stylesheet" />
</head>
<body>
<div class="container">
<div class="bottom-bar">
<div class="boxs">	
<div class="box"> 
...
</div>
<div class="box"> 
...
</div>
<div class="box"> 
...
</div>	
...		
</div>
</div>
</div>
</body>
</html>

Impostiamo un div .container che mostrerà l’immagine di sfondo, all’interno posizioniamo il div .bottom-bar con i box che conterranno le immagini e i testi.

Css

Grazie al css qui di seguto fissiamo la barra al piede della pagina e affianchiamo i box:

.container{
height: 100%;
position: relative; 
background: url(8.png);
background-size: 100% auto; 
}
.bottom-bar {
position:absolute; /**/
bottom:0;
overflow: hidden;
background: #333;
margin: 0;
width: 100%;
height:65px;      /**/
border-top: 4px solid #fcc822;
} 
.bottom-bar:hover {height:370px}
.bottom-bar .boxs {
white-space: nowrap;
text-align: center;
}
.bottom-bar .box {
display: inline-block;
padding: 0 15px;
margin: 5px;
width:280px;
height:340px;
color:#fff; font-family: arial; text-decoration: none; text-transform: uppercase;
}
.bottom-bar .box a{width:100%; float:left;color:#fff;padding:20px 0 30px 0;text-decoration: none; }
.cont-box{width:100%; float:left;white-space: normal;}
.cont-box p{color:#999;}
.bottom-bar .box img{width: 100%; height:auto;float:left;}	

Da notare white-space: nowrap applicato al div .boxs questa propietà non fà andare a capo i div .box. Per animare la barra in altezza (all’hover del mouse) utilizziamo il seguente css:

.bottom-bar:hover {height:370px}
.animate{
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}

Applichaimo la classe .animate al div .bottom-bar

...
<div class="container">
<div class="bottom-bar animate">
...
</div>
</div>

Jquery

Per animare lo scroll orizzontale utilizziamo un ottimo script di stackoverflow:

http://stackoverflow.com/questions/16050564/horizontal-scroll-on-mousemove-wide-div-in-smaller-div-with-overflowhidden-c

Includiamo prima jquery:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

Poi lo script per animare la barra al movimento del mouse:

$(function(){
var $bl    = $(".bottom-bar"),
$th    = $(".boxs"),
blW    = $bl.outerWidth(),
blSW   = $bl[0].scrollWidth,
wDiff  = (blSW/blW)-1,  // widths difference ratio
mPadd  = 60,  // Mousemove Padding
damp   = 20,  // Mousemove response softness
mX     = 0,   // Real mouse position
mX2    = 0,   // Modified mouse position
posX   = 0,
mmAA   = blW-(mPadd*2), // The mousemove available area
mmAAr  = (blW/mmAA);    // get available mousemove fidderence ratio
$bl.mousemove(function(e) {
mX = e.pageX - this.offsetLeft;
mX2 = Math.min( Math.max(0, mX-mPadd), mmAA ) * mmAAr;
});
setInterval(function(){
posX += (mX2 - posX) / damp; // zeno's paradox equation "catching delay"    
$th.css({marginLeft: -posX*wDiff });
}, 10);
});

Lo script anima la barra modificando il margine sinsitro in base alla posizione del mouse, si possono varire vari parametri tra cui la reattività del animazione.

Responsive

Come ultima cosa ottimizziamo la versione mobile linearizzando i contenuti sotto i 767px.

@media (max-width: 767px) {
.container{padding-top:150px}
.bottom-bar { position:relative; height: auto; float:left; width:100%;}
.bottom-bar:hover {height:auto}
.bottom-bar .boxs {white-space: normal;}
.bottom-bar .box {float:left; width:100%;height: auto;padding:0;margin:0;}
}

Così facendo abbiamo creato un sistema per mostrare contenuti occupando poco spazio sullo schermo in maniera intuitiva e veloce, i file per il dowload e la demo sono disponibili qui di seguito.

Stay Tuned!

demo

Se ti và ringraziami con un Like a MarchettiDesign.net.

Oppure offrimi un caffè :-)
download

1 Commento

  1. fg ha detto:

    Fiiiiiiiiiigo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *