www.www.zaachi.com » Blog/JavaScript » JQuery: Examples 2 - Animate ScrollBar

JavasScriptem ovládaný ScrollBar divu pomocí knihovny jQuery
V příkladu je vytvořen div, který má nastavenu vlastnost overflow: auto a je jím tedy možné srolovat. Div obsahuje text, ve kterém nám jQuery umožní lepší orientaci. Pro pochopení si můžete prohlídnout ukázku:
Text je členěn na nadpisy H1 a navíc obsahuje obrázky. Pomocí jQuery zjistíme všechny tyto elementy zobrazíme jejich seznam, ve kterém budeme na elementy v divu odkazovat a umožňovat k nim srolovat.
Div, ve kterém je umístěn text má ID scrollDiv. Seznam všech nadpisů H1 z něj získáme jednoduše takto:
var i = 0;
for( i = 0; i < $("#scrollDiv h1").length; i++ ){
//práce s nadpisem
}
V cyklu k nadpisu můžeme přistupovat pomocí:
$("#scrollDiv h1").eq(i).html();
V tomto ukázkovém příkladu potřebujeme kromě nadpisů získat i seznam obrázků. To uděláme podobně, jenom pro tag img.
Pokud máme seznam všech odkazů a obrázků, budeme pokračovat přidáním eventu pro kliknutí a nabídnutí tak možnosti srolování.
V první řádě musíme zjistit offset divu s textem, ve kterém srolujeme a offset nadpisu (nebo obrázku), ke kterému chceme srolovat (pro rozlišení pozice je použita hodnota z atributu name. V tomto atributu je uloženo číslo identifikující pozici elementu):
var divOffset = $('#scrollDiv').offset().top;
var elementOffset = $("#scrollDiv h1").eq($(this).attr("name") ).offset().top;
Pokud známe obě tyto hodnoty, můžeme konečně animovat samotné srolování:
$('#scrollDiv').animate({scrollTop: '+=' + (elementOffset - divOffset) + 'px'}, 700);
Pro lepší pochopení si můžete prohlídnout celý zdrojový kód:
<html>
<head>
<script src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var i = 0;
//nacteni vsech H1 nadpisu
for( i = 0; i < $("#scrollDiv h1").length; i++ ){
//pridani nadpisu do leveho divu
$("#titleDiv").append( "<a href='#' name='" + i + "' onclick='return false;'>" + $("#scrollDiv h1").eq(i).html() + "</a><br />");
}
$("#titleDiv").append('<br /><br />');
//nacteni vsech obrazku
for( i = 0; i < $("#scrollDiv img").length; i++ ){
//pridani obrazku do leveho divu
$("#titleDiv").append( "<img src='" + $("#scrollDiv img").eq(i).attr("src") + "' name='" + i + "' width='50px' /> ");
if( i%2 )
$("#titleDiv").append('<br />');
}
//event na odkaz v levem divu
$("#titleDiv a").click(function(){
//zjisteni pozice zobrazovaneho nadpisu
var elementOffset = $("#scrollDiv h1").eq($(this).attr("name") ).offset().top;
//zjisteni pozice divu s textem
var divOffset = $('#scrollDiv').offset().top;
//odrolovani
$('#scrollDiv').animate({scrollTop: '+=' + (elementOffset - divOffset) + 'px'}, 700);
//efekt odkazu
$(this).fadeTo(500, 0.1, function (){
$(this).css('color', 'lightGreen');
$(this).fadeTo(500, 1);
});
});
//event na obrazek v levem divu # podobne jako odkaz
$("#titleDiv img").click(function (){
//zjisteni pozice zobrazovaneho nadpisu
var elementOffset = $("#scrollDiv img").eq($(this).attr("name") ).offset().top;
//zjisteni pozice divu s textem
var divOffset = $('#scrollDiv').offset().top;
//odrolovani na obrazek
$('#scrollDiv').animate({scrollTop: '+=' + (elementOffset - divOffset) + 'px'}, 700);
//efekt obrazku
$(this).fadeTo(500, 0.5, function (){
$(this).fadeTo(500, 1);
});
});
});
</script>
<style>
h1{
color: #191970;
font-size: 20px;
}
#scrollDiv{
background-color: #f5f5f5;
overflow: auto;
height: 450px;
width: 500;
border: 1px solid black;
padding: 5px;
margin: 5px;
}
a{
color: #556b2f;
text-decoration: none;
font-weight: normal;
}
table{
border: 4px solid silver;
padding: 10px;
margin: 10px;
}
td{
padding: 10px;
}
</style>
</head>
<body>
<table>
<tr>
<td valign="top">
<div id="titleDiv"></div>
</td>
<td>
<div id="scrollDiv">
<h1>heading 1</h1>
<p> paragraph ...</p>
<h1>heading 2</h1>
<p> paragraph ...</p>
<h1>heading 3</h1>
<p> paragraph ...</p>
<h1>heading 4</h1>
<p> paragraph ...</p>
<h1>heading 5</h1>
<p> paragraph ...</p>
<h1>heading 6</h1>
<p> paragraph ...</p>
<h1>heading 7</h1>
<p> paragraph ...</p>
<h1>heading 8</h1>
<p> paragraph ...</p>
<h1>heading 9</h1>
<p> paragraph ...</p>
<h1>heading 10</h1>
<p> paragraph ...</p>
<h1>heading 11</h1>
<p> paragraph ...</p>
<h1>heading 12</h1>
<p> paragraph ...</p>
<h1>heading 13</h1>
<p> paragraph ...</p>
</div>
</td>
</tr>
</table>
</body>
</html>

Autor: Zaachi
Publikováno: 7.1.2009 10:56:47
JQuery: Examples 1
jQuery: Examples 3 – Ajax
iPhone - presentModalViewController animate