Visualizzazione risultati 1 fino 8 di 8

Discussione: tenere premuto per eseguire piu volte una funzione javascript

  1. #1
    Guest

    Predefinito tenere premuto per eseguire piu volte una funzione javascript

    Salve a tutti.
    La mia pagina ha due bottoni e una foto:
    un tasto ingrandisce di un punto la foto,
    l'altro tasto la rimpicciolisce di un punto.

    Vorrei che tenendo premuto un tasto lui ne esegua il comando ripetutamente onde cosi evitare di dovere premere ripetutamente sullo stesso tasto per ottenere la dimensione della foto desiderata...
    C'è qualcuno che ha idea di come fare?

  2. #2
    Guest

    Predefinito

    Potresti farlo con Flash.
    In html/javascript non è possibile.


    Ciaooooo!!!!!

  3. #3
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Uhm.. non penso sia così impossibile,
    direi di accantonare l'evento "onclick" che sicuramente hai usato e catturare piuttosto i due eventi:
    onmousedown e onmouseup sul bottone "zoom in" (ingrandisci)

    al onmousedown imposti una variabile a true tipo:
    isZoomingIn = true;
    e ovviamente al onmouseup la setti a false.
    stessa cosa con l'altro bottone "zoom out" (diminuisci)
    isZoomingOut = true;

    A questo punto devi mettere un timer che scatta ogni tot secondi (diciamo 1 sec, = 1000 millis) che non fa altro che controllare le due variabili isZoomingIn e isZoomingOut se trova a true una di queste richiama la sua rispettiva funzione per zoomare (in/out).
    tipo:
    Codice HTML:
    function timerZoomCheck(){
     if (isZoomingIn)
      zoomIn();
     if (isZoomingOut)
      zoomOut();
     setTimeout("timerZoomCheck()", 1000);
    }
    dove zoomIn() e zoomOut() sono le tue attuali funzioni per zoomare che venivano chiamate al singolo click.
    Ultima modifica di heracleum : 26-08-2005 alle ore 01.52.02
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  4. #4
    Guest

    Predefinito

    Chiedo venia, avete ragione si può fare (come disse Frankestin Junior)!

    Ho buttato giù qualcosa di molto rozzo ma che funziona (anche se ho scoperto un piccolissimo bug):

    Codice HTML:
    <script language="JavaScript" type="text/JavaScript">
    var premutoin;
    var premutoout;
    function settain(){
    if(!premutoin){
    premutoin=true;
    }else{
    premutoin=false;
    }
    premutoout=false;
    }
    function settaout(){
    if(!premutoout){
    premutoout=true;
    }else{
    premutoout=false;
    }
    premutoin=false;
    }
    function zoomin(){
    immagine.width+=10;
    immagine.height+=10;
    }
    function zoomout(){
    var immagine=document.images['immagine'];
    immagine.width-=10;
    immagine.height-=10;
    }
    function controllo(){
    if(premutoin){
    zoomin();
    }
    if(premutoout){
    zoomout();
    }
    }
    
    setInterval('controllo()',100);
    </script>
    </head>
    
    <body>
    <u><a onMouseDown="javascript:settain();" onMouseUp="javascript:settain();" style="cursor:hand">ZoomIn</a></u> | <u><a onMouseDown="javascript:settaout();" onMouseUp="javascript:settaout();" style="cursor:hand">ZoomOut</a></u><br>
    <img src="dinamismo.gif" width="800" height="600" border="1" name="immagine">
    Sembra complicato, ma è solo contorto ;)
    Praticamente faccio una serie di controlli per vedere ciò che sta succedendo, se è stato premuto qualcosa, cosa è stato settato, ecc. E poi non faccio altro che modificare le dimensioni dell'immagine.

    Veniamo al bug: provate a fare un doppio click sui link zoomin e zoomout.


    Ciaoooooo!!!!!!!!

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Thumbs up Problema risolto!

    La pagina con l'effetto corretto (che gioco di parole...!)
    http://dementialsite.altervista.org/extra/zoom/zoom.htm

    Le modifiche che ho fatto:
    - l'evento di click o doppio click è diverso da una successiva pressione e rilascio del mouse, ecco quindi che compaiono gli eventi onClick="premutoin=false;zoomin()" e onDblClick="premutoin=false;zoomin()" (e simmetricamente nel pulsante ZoomOut)
    - (più una modifica concettuale che funzionale), ho riscritto le funzioni zoomin() e zoomout() moltiplicando i valori per 1.01 e 0.99 piuttosto che aggiungendo o togliendo 10 pixel: lo zoom così viene fatto meglio (anche se, ovviamente, al limite la deformazione c'è sempre)

    Statemi bene...

    P.S. Ho realizzato un effetto zoom migliorato, la pagina è
    http://dementialsite.altervista.org/...zoom/zoom2.htm
    così la foto non viene mai più deformata!
    Ultima modifica di dementialsite : 28-08-2005 alle ore 10.49.53 Motivo: Aggiunto nuovo script [P.S.]

  6. #6
    Guest

    Predefinito

    dementialsite Il tuo script è *SPETTACOLARE*.
    Grazie a tutti il problema è risolto davvero...

  7. #7
    Ospite Guest

    Predefinito

    mi servirebbe davvero per la mia corsa, facendo avanzare la macchina premendo il volante di continuo sarebbe molto meglio, certo ora avanza in php ma così facendo fa una richiesta al server ad ogni click, ma siccome mi serve solo recuperare il totale 1000 alla fine la corsa potrei farla in js, recuperando solo alla fine la variabile, se ho un po' di tempo poi lo cambio.

  8. #8
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    ok tutto risolto bene..

    farlimas:
    non ho molto chiara la situazione, se vuoi puoi aprire un thread apposito così è molto più chiaro e i mod restano buonini :D

    debug:
    se non ti da' fastidio potrei suggeristi qualche piccola ottimizzazione di codice per renderlo più chiaro, cose tipiche, per esempio il classico alternare di booleani
    per es. il tuo codice:
    Codice:
    if(!premutoin){
    premutoin=true;
    }else{
    premutoin=false;
    }
    si può tranquillamente risolvere in UNA riga sola (al posto di 5):

    Codice:
    premutoin = !premutoin;
    cioè alla variabile booleana si assegna il suo opposto.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •