PDA

Visualizza la versione completa : [jquery] scrolling che non si ferma correttamente


84morena
09-11-2010, 15:13
salve ragazzi ho trovato uno scroller orizzontale in jquery e ho cercato di adattarlo alle mie esigenze,ma sia nello scorrere le notizie a destra , sia sinistra se effettuo col mouse il click in modo continuo,non si ferma,ma va avanti...mentre se per ogni click attendendo un instante arrivo alla fine delle news e si ferma regolarmente
questo lo scroller:



<div id="mainBox">
images/arrow-left.png //corrispondono alle frecce destra e sinistra
images/arrow-right.png
<div id="newsBoxCont">
<ul id="newsBox">
<li class="singleNews">
<h2>Eventi in programmazione</h2>



I due appuntamenti ("]Iscriviti ai prossimi eventi[/url]
</p>

<li class="singleNews">
<h2>Importante successo</h2>



Iscriviti ai prossimi eventi
</p>

<li class="singleNews">
<h2>Importante successo</h2>



[url=")
</p>

[/list]
</div>
</div>


mentre questo lo script:


<script type="text/javascript">
$(document).ready(function(){
var nListElem= $('#newsBox').find('li').length;
var boxSize = 211;
$("#newsBox").width(boxSize*nListElem);

$('img.left').click(function(){

if (parseInt($("#newsBox").css('left'))<0){
$("#newsBox").animate({"left": "+=211px"}, "slow");
}
});


$('img.right').click(function(){
if ( parseInt($("#newsBox").css('left')) - 631 - 211 > boxSize*nListElem*-1 ){
$("#newsBox").animate({"left": "-=211px"}, "slow");
}

});

});
</script>

saluti

Pastore12
09-11-2010, 16:38
mmm
...
prova ad aggiungere un alert nelle funzioni che gestiscono il click e stampati la seguente informazione:

- l'attributo css "left" di newsBox

vedi come cambia di click in click e cerca di determinare il valore massimo e minimo altre i quali lo scroller va disabilitato.


var max = ...;
var min = ...;

$('img.left').click(function(){
if (parseInt($("#newsBox").css('left'))<min){
$("#newsBox").animate({"left": "+=211px"}, "slow");
}
});

$('img.right').click(function(){
if ( parseInt($("#newsBox").css('left')) > max ){
$("#newsBox").animate({"left": "-=211px"}, "slow");
}

});



Penso per dovrai derivare min e max dai seguenti valori (dei quali non conosco bene il significato...):
- 631
- 211
boxSize
nListElem

84morena
09-11-2010, 18:35
$('img.left').click(function(){
if (parseInt($("#newsBox").css('left'))<0){
$("#newsBox").animate({"left": "+=211px"}, "slow");
}
else
{
if (parseInt($("#newsBox").css('left'))<211){
alert('stop');
}
}

});

aggiungendo l'alert sia a destra che a sinistra si ferma correttamente...
il problema avviene quando clicco in modo continuo e sproporzionato il tasto sinistro del mouse

84morena
09-11-2010, 23:20
il problema principale che dovrei imporre un click al secondo max....

ho impostato che quando arriva alla fine rende invisibile il botton,ma inutile xk se clicco + volte contemporeaneamente prosegue lo scroller


$('img.right').click(function(){
if ( parseInt($("#newsBox").css('left')) - 631 > boxSize*nListElem*-1 ){
$("#newsBox").animate({"left": "-=211px"}, "slow");
}
else
{
//alert(parseInt($("#newsBox").css('left')) - 631 - 211);
if( parseInt($("#newsBox").css('left')) - 631 - 211 > -1263 )
{
$(this).find('img.left').css('visibility','hidden' );
$(this).css('visibility','hidden');
}
}
});

Pastore12
10-11-2010, 13:56
Ma allora... se sai quanti click puoi fare a destra e quanti ne puoi fare a sinistra, mettici un contatore globale..

diciamo che l'utente parte da contatore=0, al primo click a destra contatore=1, al secondo contatore=2.

Se contatore=0, il click a sinistra disabilitato. Se contatore>0, il click a sinistra diminuisce di 1 il contatore (contatore-=1)
Se contatore=max, il click a destra disabilitato. Se contatore<max, il click a destra aumenta di 1 il contatore (contatore+=1)

Il max dovrebbe essere il numero degli oggetti totali - gli oggetti in pagina + 1 (con un alert lo puoi verificare facilmente...)

Per... il fatto che si veda il bianco potrebbe anche essere voluto, insomma... potrebbe anche andar bene cos... non sar il massimo, ma l'utente ha molto di cui lamentarsi, arrivato a fine a corsa quando vede il prima quadrato bianco. Se insiste ancora... o un idiota o vuole vedere che succede, quindi mi sembra giusto accontentarlo :D

Loading