webForumDet fria alternativet

jCarousel - ett tillägg som ni kanske kan hjälpa mig med

JavaScript

10 svar · 792 visningar · startad av bikic

Medlem sedan juni 2006261 inlägg
Frågan#1

Hej alla,

På följande sida ser ni en slidefunktion (jCarousel):

http://sorgalla.com/projects/jcarousel/

Denna är kanon och man kan göra många fiffiga saker med den. Väljer du att visa 4 bilder inom slidewrappern och har 12 totalt så kan man klicka sig vidare och sedan tillbaka. Min fråga är om man på något sätt kan gömma både next och prev-knapparna i fall sliden innehåller färre eller exakt 4. Idag kan man bara gömma en av knapparna.

Medlem sedan juni 20019 519 inlägg
#2

kolla om den har mer än 4x bilder innan du "binder" plugin:et till elementen.

Medlem sedan juni 2006261 inlägg
#3

Hur menar du med kolla? Det som jag testkör med nu har bara 4 bilder och jag har angivit i toppen att den ska visa 4 bilder per slide. Väljer jag wrap: last, så visar den next-knappen, använder jag first så visar den prev-knappen, använder jag both visar den båda och sätter jag den till null så visar den båda.

Medlem sedan juni 20019 519 inlägg
#4

Hur ser din HTML kod ut och hur ser din JS kod ut?

<div id="someething">
	<img src="...">
	<img src="...">
	<img src="...">
	<img src="...">
</div>

<script>
var el = $("#something");

//Bind plugin only if the element has more children then 4	
if(child.children().length>4) {
	el.jcarousel();
}

Eller är det att du alltid vill visas 4 bilder per slide? Är väl bara att wrappar bilder i en div:

<div id="something">
    <div>
        <img src="...">
        <img src="...">
        <img src="...">
        <img src="...">
    </div>
    
    <div>
        <img src="...">
        <img src="...">
        <img src="...">
        <img src="...">
    </div>
    
    <div>
        <img src="...">
        <img src="...">
        <img src="...">
        <img src="...">
    </div>
    
    <div>
        <img src="...">
        <img src="...">
        <img src="...">
        <img src="...">
    </div>

    <div>
        <img src="...">
        <img src="...">
        <img src="...">
        <img src="...">
    </div>
</div>
Medlem sedan juni 2006261 inlägg
#5

På raden Scroll: 4, så talar jag om hur många <li> som ska visas inom själva wrappern. Om dessa är mindre eller lika med värdet av scroll så ska den inte visa några pilar.

<script type="text/javascript">

        $(document).ready(function() {

		$('#mycarousel').jcarousel({
			auto: 0,
			wrap: 'both',
			scroll: 4,
			animation: 1000
		});

	});

</script>

<ul id="mycarousel">

	<li>Något här...</li>
	<li>Något här...</li>
	<li>Något här...</li>
	<li>Något här...</li>
	<li>Något här...</li>
	<li>Något här...</li>
	<li>Något här...</li>
	<li>Något här...</li>

</ul>
Medlem sedan juni 20019 519 inlägg
#6

Läs mitt första svar då, om #mycarousel den har fler children än 4

antingen om du nu måste köra köra jscarousel även om det bara är 4st så ha en koll om children är <4 så skriver du över buttonNextHTML och buttonPrevHTML till Null enligt dokumentationen:

var carousel = $('#mycarousel'),
    displayButton = carousel.children>4,
    button = displayButton ? "<div></div>" : null; //default values

carousel.jcarousel({
    auto: 0,
    wrap: 'both',
    scroll: 4,
    animation: 1000,
    buttonNextHTML: button,
    buttonPrevHTML: button
});
Medlem sedan juni 2006261 inlägg
#7

Tack för hjälpen!

Det verkar inte riktigt som om det fungerar. Jag har talat om att det ska visas 4 bilder per wrap och pilarna (next och prev) syns inte, men så fort jag lägger till en femte bild så borde pilarna synas men det gör dem inte.

Kör scriptet enligt ovan.

Medlem sedan juni 20019 519 inlägg
#8

Då få du lyssna på events, om du få in fler element med ajax eller annat sätt som du påverkar DOM trädet, du få kolla på deras callback funktioner de har i pluginet, du vill inte köra min kod ovan, du vill visa knapparna men om det bara har 4st bilder så skall du bara ändra display/visibilityn på next/prev knapparna.

eller helt enkelt kolla den genererade HTML koden, om man tittar på exempel sidorna så genereras det på en av sidorna en klass:

jcarousel-next jcarousel-next-horizontal jcarousel-next-disabled jcarousel-next-disabled-horizontal

det är bara att sätta en egen CSS på disabled delarna att de inte skall visas.

Medlem sedan juni 2006261 inlägg
#9

Jag är så kass på att förklara, tack för att du har tålamod med mig ;) Lär mig grymt mycket!

Defaultvärdet är ju att pilarna alltid ska visas. Men jag vill att pilarna endast ska visas om det är fler än 4 bilder. Jag testade med ditt senaste script om att ersätta <div></div> med null, men det fungerar inte. Det verkade dock så riktigt bra lösning på mitt problem.

Medlem sedan juni 20019 519 inlägg
#10

jag läser bara http://sorgalla.com/projects/jcarousel/#Configuration där buttonNextHTML och buttonPrevHTML som standard är <div></div>. men skriptet just nu kollas bara en gång, det är när sidan laddas in (har inte testat koden), men efter det så om det var fler än 4 bilder så bör next/prev knappen synas, men inte om du lägger in fler bilder efter att jquery skriptet har körts. dock vet jag inte hur du skriver för att få fler än 4st i efterhand.

dum som jag är har jag ju skrivit fel....

displayButton = carousel.children().length>4,

skall det ju självklart vara.

Medlem sedan juni 2006261 inlägg
#11

Nu funkade det! Tack och bock!

255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)