Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Aggiungere un ritardo alla cliccabilità di un elemento

    Ho sviluppato un codice FBJS per una fan page di facebook sfruttando del codice già scritto per creare un carosello di immagini.

    Il problema principale di questo carosello di immagini è che se un utente multiclicca in continuazione il tasto avanti o indietro, lo script perde il passo corretto di pixel che sono necessari per visualizzare correttamente le varie slide.

    Siccome non sono molto esperto di javascript mi chiedevo se, e in che modo è possibile far si che i bottoni avanti ed indietro non possano generare più di un evento ogni tot secondi.
    (sempre che questa funzione sia implementabile in FBJS).

    Vi ringrazio in anticipo.

    codice:
    var numslides = 6; /*numero di scorrimenti che intendo ottenere*/
    var slidesvisible = 1; /* numero di slide da mostrare per volta */
    var currentslide = 0; /* slide corrente */
    var slidewidth = 456; /* dimensione in pixel della slide*/
    function goright() { 
    if (currentslide <= (numslides-slidesvisible-1)) { Animation(document.getElementById('slideshow_inner')).by('right', slidewidth+'px').by('left', '-'+slidewidth+'px').go(); if (currentslide == (numslides-slidesvisible-1)) { 
    Animation(document.getElementById('right_button')).to('opacity', '0.3').go(); 
    Animation(document.getElementById('left_button')).to('opacity', '1').go(); 
    } 
    if (currentslide < (numslides-slidesvisible-1)) { 
    Animation(document.getElementById('left_button')).to('opacity', '1').go();
     } 
    currentslide++;
     }
     } 
    
    function goleft() {
     if (currentslide > 0) { 
    Animation(document.getElementById('slideshow_inner')).by('left', slidewidth+'px').by('right', '-'+slidewidth+'px').go(); 
    if (currentslide == 1) {
     Animation(document.getElementById('left_button')).to('opacity', '0.3').go(); 
    Animation(document.getElementById('right_button')).to('opacity', '1').go(); } if (currentslide > 1) {
     Animation(document.getElementById('right_button')).to('opacity', '1').go();
     }
     currentslide--;
     }
     }
    java noob user :V

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    ti serve quello che a livello concettuale si chiama semaforo.

    ogni volta che entri nell'esecuzione delle funzioni go_left e go_right devi settare una variabile che definisca una mutua esclusione (mutex) degli handler fino a quando nessuno di questi è in esecuzione

    all'atto pratico definisci una variabile mutex a false
    all'interno delle funzioni verifichi come prima condizione se la variabile è true nel qualcaso interrompi (return false), altrimenti setti la variabile a true e continui. Al termine risetti la variabile a false.

    Nel tuo caso usi delle animazioni: ricorda che di norma queste sono asincrone quindi quest'ultimo reset va fatto nella callback dell'ultima animazione.

  3. #3
    Ti ringrazio per la risposta rapida,

    ho provato ad implementare un mutex come mi hai detto, tuttavia ho il sospetto che l'esecuzione della funzione termini prima della fine dell'esecuzione dell'animazione (che dura circa mezzo secondo), quindi il mutex cambia stato, ma viene resettato a false troppo presto.

    Credo di averlo implementato in maniera corretta, ti scrivo il codice qua sotto.
    Grazie ancora.

    ---------------------------------------------------------


    var numslides = 6;
    var slidesvisible = 1;
    var currentslide = 0;
    var slidewidth = 456;
    var mutex = 0;

    function goright() {
    if (mutex==0){
    mutex=1;
    if (currentslide <= (numslides-slidesvisible-1)) {
    Animation(document.getElementById('slideshow_inner ')).by('right', slidewidth+'px').by('left', '-'+slidewidth+'px').go();
    if (currentslide == (numslides-slidesvisible-1)) {
    Animation(document.getElementById('right_button')) .to('opacity', '0.3').go();
    Animation(document.getElementById('left_button')). to('opacity', '1').go();
    }
    if (currentslide < (numslides-slidesvisible-1)) {
    Animation(document.getElementById('left_button')). to('opacity', '1').go();
    }
    currentslide++;
    }
    mutex=0;
    }
    else{
    return;
    }
    }
    --------------------------------------------------------
    java noob user :V

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Non so quale libreria tu stia usando per quelle animazioni
    ma dovresti, come ti ho scritto prima, riportare il valore della variabile a false in una callback dell'animazione (che viene eseguita, appunto, ad animazione terminata)

    quindi verifica che tu possa definirne una

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.