webForumDet fria alternativet

roundabout - btnNextCallback och childSelector

JavaScript

4 svar · 994 visningar · startad av noshornin

Medlem sedan aug. 2008815 inlägg
Frågan#1

Hej.

Jag försöker fixa en slider med roundabout (http://fredhq.com/projects/roundabout). Problemet jag har nu är att jag enbart vill ha en bild i varje li och sedan en dold text under bilden. Denna texten ska fadeas in på det aktiva elementet.

Alltså jag har en lista såhär:

<ul class="myRoundabout">
<li>
<img src="..." alt="">
<div style="display: none;">text text text</div>
</li>

<li>
<img src="..." alt="">
<div style="display: none;">text text text</div>
</li>
.
.
.
</ul>

Sedan vill jag på varje btnNextCallback och btnPrevCallback att diven på det aktiva elementet fadas in. Jag förstår inte hur jag ska få tag på det aktiva elementet :(

Jag får dock inte till det alls och känner att mina javascript-kunskaper är lite otränade...

Skrivit något sådant här hittills:

<script>
   $(document).ready(function() {

      $('ul.myRoundabout').roundabout({
        shape: 'waterWheel',
	btnNextCallback: function(){
		roundabout("getChildInFocus").div.fadeIn('slow', function(){});
	},
	btnPrevCallback: function(){
		roundabout("getChildInFocus").div.fadeIn('slow', function(){});
	}
      });
   });
</script>

Tack i förväg.

Medlem sedan juni 20019 519 inlägg
#2

vad få du om du kör console.log(this) inne i din showText i konsollen på din webbläsare (Chrome, Firefox+firebug)?

Om den retunera din ul.myRoundabout så kan du väl bara köra:

$(this).roundabout("animateToNextChild")
Medlem sedan aug. 2008815 inlägg
#3

Tack för svaret voigtann1. Men jag lyckades lösa det på egenhand. om någon annan vill göra samma sak, kan jag ju skriva hur jag gjorde.

Om man sätter option triggerFocusEvents till true kommer en "focus" event att triggas på li elementet varje gång det hamnar i fokus. Samtidigt kommer en "blur" event att triggas på det li element som lämnar fokus.

Det är ju då bara att skriva ngt i stil med:

<script>
$(document).ready(function() {
	$('ul.myRoundabout').roundabout({
		shape: 'waterWheel',
		triggerFocusEvents: true,	//krävs för att focus event skiten ska fungera

	},function(){
		//visar diven under det li element som har id="1" på roundabouts callback
		jQuery("div", "#1").fadeIn('slow');
	 });
		 
	$('li').bind('blur', function() {
		//när li elementet åker ur fokus så fadeas det ut
		jQuery("div", this).fadeOut('slow');
	});
		 
	$('li').bind('focus', function() {
		//när li elementet åker i fokus så fadeas det in
		jQuery("div", this).fadeIn('slow');
	});
		 
});
</script>
Medlem sedan juni 20019 519 inlägg
#4

Vill ge lite tips:

Din kod kommer inte fungera i IE (du har , för mycket i ditt object) och $ är samma sak som window.jQuery (eller som du har där jQuery) så du kan ju "korta" ner det, du binder också alla li element på din sida, vilket är kanske det önskade resultatet:

$(document).ready(function() {
	$('ul.myRoundabout').roundabout({
		shape: 'waterWheel',
		triggerFocusEvents: true
	}).find('li').bind('blur focus', function(e) {
		$('div', this)[e.type === 'blur' ? 'fadeOut' : 'fadeIn']('slow');
	})
	.filter(':first').trigger('focus'); // find the first li and trigger its focus event.
});
Medlem sedan aug. 2008815 inlägg
#5

Tack så mycket :).

Det där var ju klart snyggare så du får lösningen istället ;)

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)