• User Attivo

    Vincolare Effetto neve (script) su una tabella, possibile?

    ho questo effetto neve... su file "snow.js" :

    
    //Snow - http://www.btinternet.com/~kurt.grigg/javascript
    
    if  ((document.getElementById) && 
    window.addEventListener || window.attachEvent){
    
    (function(){
    
    //Configure here.
    
    var num = 30;   //Number of flakes
    var timer = 30; //setTimeout speed. Varies on different comps
    var enableinNS6 = 1 //Enable script in NS6/Mozilla? Snow animation could be slow in those browsers. (1=yes, 0=no).
    
    //End.
    
    var y = [];
    var x = [];
    var fall = [];
    var theFlakes = [];
    var sfs = [];
    var step = [];
    var currStep = [];
    var h,w,r;
    var d = document;
    var pix = "px";
    var domWw = (typeof window.innerWidth == "number");
    var domSy = (typeof window.pageYOffset == "number");
    var idx = d.getElementsByTagName('div').length;
    
    if (d.documentElement.style && 
    typeof d.documentElement.style.MozOpacity == "string")
    num = 12;
    
    for (i = 0; i < num; i++){
    sfs* = Math.round(1 + Math.random() * 1);
    
    document.write('<div id="flake'+(idx+i)+'" style="position:absolute;top:0px;left:0px;width:'
    +sfs*+'px;height:'+sfs*+'px;background-color:#ffffff;font-size:'+sfs*+'px"><\/div>');
    
    currStep* = 0;
    fall* = (sfs* == 1)?
    Math.round(2 + Math.random() * 2): Math.round(3 + Math.random() * 2);
    step* = (sfs* == 1)?
    0.05 + Math.random() * 0.1 : 0.05 + Math.random() * 0.05 ;
    }
    
    
    if (domWw) r = window;
    else{ 
      if (d.documentElement && 
      typeof d.documentElement.clientWidth == "number" && 
      d.documentElement.clientWidth != 0)
      r = d.documentElement;
     else{ 
      if (d.body && 
      typeof d.body.clientWidth == "number")
      r = d.body;
     }
    }
    
    
    function winsize(){
    var oh,sy,ow,sx,rh,rw;
    if (domWw){
      if (d.documentElement && d.defaultView && 
      typeof d.defaultView.scrollMaxY == "number"){
      oh = d.documentElement.offsetHeight;
      sy = d.defaultView.scrollMaxY;
      ow = d.documentElement.offsetWidth;
      sx = d.defaultView.scrollMaxX;
      rh = oh-sy;
      rw = ow-sx;
     }
     else{
      rh = r.innerHeight;
      rw = r.innerWidth;
     }
    h = rh - 2;  
    w = rw - 2; 
    }
    else{
    h = r.clientHeight - 2; 
    w = r.clientWidth - 2; 
    }
    }
    
    
    function scrl(yx){
    var y,x;
    if (domSy){
     y = r.pageYOffset;
     x = r.pageXOffset;
     }
    else{
     y = r.scrollTop;
     x = r.scrollLeft;
     }
    return (yx == 0)?y:x;
    }
    
    
    function snow(){
    var dy,dx;
    
    for (i = 0; i < num; i++){
     dy = fall*;
     dx = fall* * Math.cos(currStep*);
    
     y*+=dy;
     x*+=dx; 
    
     if (x* >= w || y* >= h){
      y* = -10;
      x* = Math.round(Math.random() * w);
      fall* = (sfs* == 1)?
      Math.round(2 + Math.random() * 2): Math.round(3 + Math.random() * 2);
      step* = (sfs* == 1)?
      0.05 + Math.random() * 0.1 : 0.05 + Math.random() * 0.05 ;
     }
     
     theFlakes*.top = y* + scrl(0) + pix;
     theFlakes*.left = x* + scrl(1) + pix;
    
     currStep*+=step*;
    }
    setTimeout(snow,timer);
    }
    
    
    function init(){
    winsize();
    for (i = 0; i < num; i++){
     theFlakes* = document.getElementById("flake"+(idx+i)).style;
     y* = Math.round(Math.random()*h);
     x* = Math.round(Math.random()*w);
    }
    snow();
    }
    
    
    if (window.addEventListener){
     window.addEventListener("resize",winsize,false);
     window.addEventListener("load",init,false);
    }  
    else if (window.attachEvent){
     window.attachEvent("onresize",winsize);
     window.attachEvent("onload",init);
    } 
    
    })();
    }//End.
    
    

    RICHIAMATO DALLA PAGINA html:

    [html]
    <script type="text/javascript" src="http://sito.org/_altervista_ht/snow.js"></script>[/html]

    tuttavia dopo aver applicato il codice, l'effetto neve ce l'ho sulla pagina INTERA mentre io lo vorrei solo limitato ad una tabella, è fattibile

    esempio tabella sul quale vorrei applicare l'effetto neve :

    [html]<table width="450" height="200" border="1">
    <tr>
    <td> </td>
    </tr>
    </table>[/html]


  • User Attivo

    per farla più breve.... volevo sapere se si può DELIMITARE l'effetto neve solo all'interno di una tabella anzichè a tutta la pagina html....


  • Super User

    Ciao, per come funziona lo script mi pare difficile riuscire a confinarlo in una tabella.
    Si tratta quasi di rifarlo.
    Prova qualche altro script simile, magari più flessibile.

    :ciauz:


  • User Attivo

    Ciao Claudio... hai per caso qualche link in merito.... o come bisogna modificare tale codice script? Grazie.


  • Super User

    @fasa said:

    Ciao Claudio... hai per caso qualche link in merito.... o come bisogna modificare tale codice script? Grazie.
    Niente che funzioni bene con tutti i browser.... 😞
    E' un problema trovarne di crossbrowser. Mi spiace. 🙂

    Tranne qualche script pronto disperso chissà dove, penso dovresti farlo praticamente da zero....


  • User Attivo

    Claudio, basta che mi funzioni con Explorer 6 e 7 e Mozzilla - Firefox...


  • User Attivo

    p.s. avrei trovato questo codice.... o similare per bloccare lo script... forse da modificare....

    <script language="text/javascript">
    function immagine_variabile(){
    document.getElementById('http://sito/_altervista_ht/snow.js').style.display="block">);
    }
    </script>


  • Super User

    @fasa said:

    p.s. avrei trovato questo codice.... o similare per bloccare lo script... forse da modificare....

    Prova e facci sapere.... 🙂


  • User

    Salve! Non credo di essere molto esperto in campo ma avevo pensato che potresti fare in questo modo:

    1. Crei una nuova pagina html e la chiami "tabella.html" dove scrivi ciò che dovra contenere la tabella e importi lo script in javascript delal neve
    2. Poi sulla pagina html dove si dovrà visualizzare la tabella inserisci un iframe riferito alla pagina precedente tipo questo:
      <iframe width="x" height="x marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="no" scrolling="no" target="_self" src="tabella.html"></iframe>

    e il gioco è fatto... è un metodo poco elegante ma funziona :yuppi: