Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2009, 21:44
Avatar de pato12
pato12
 
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 2 meses
Puntos: 101
[APORTE] Easy Url

Hola,
Les traigo un codigo javascript para hacer un efecto de anclaje facilmente.
Anda en Firefox (yo lo probe en el 3.0), IE 6 al 8, Opera (lo probe en la vercion 9.25) y Google Chrome. En todos esos andan bien, pero no puede hacerlo andar en IE 5.
Código javascript:
Ver original
  1. (function(){
  2.     var init=function(){
  3.         var tags=document.getElementsByTagName('*'),doms=[],intervalo=false,timeout=false,time=20; // En este ultimo (time), se define la velocidad.
  4.         for(var i=0;i<tags.length;i++){
  5.             if(tags[i].getAttribute('rel')!=null){
  6.                 if(tags[i].getAttribute('rel')=='easyurl'){
  7.                     doms.push(tags[i]);
  8.                 }
  9.             }
  10.         }
  11.         for(var i=0;i<doms.length;i++){
  12.             doms[i].onclick=function(){
  13.                 var id=this.getAttribute('href').split('#')[1],dom=document.getElementById(id),offsetTop=0,offsetLeft=0,elm=dom;
  14.                 while(elm.offsetParent){
  15.                     offsetLeft+=elm.offsetLeft;
  16.                     offsetTop+=elm.offsetTop;
  17.                     elm=elm.offsetParent;
  18.                 }
  19.                 if(intervalo)clearInterval(intervalo);
  20.                 if(timeout)clearTimeout(timeout);
  21.                 var actT=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
  22.                 var actL=document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;
  23.                 time=time>1?time:2;
  24.                 intervalo=setInterval(function(){
  25.                     if(actT==offsetTop&&actL==offsetLeft){clearInterval(intervalo);clearTimeout(timeout);}
  26.                     actT=(actT>offsetTop?Math.floor(actT-((actT-offsetTop)/time)):Math.ceil(actT+((offsetTop-actT)/time)));
  27.                     actL=(actL>offsetLeft?Math.floor(actL-((actL-offsetLeft)/time)):Math.ceil(actL+((offsetLeft-actL)/time)));
  28.                     window.scrollTo(actL,actT);
  29.                 },1);
  30.                 timeout=setTimeout(function(){clearInterval(intervalo);},time*1000); // ESTO ES POR SI SE TRABA, EN UNOS SEGUNDOS LO LIBERAMOS
  31.                 return false;
  32.             };
  33.         }
  34.     };
  35.     if(window.addEventListener){
  36.         window.addEventListener('load',init,false);
  37.     }else if(window.attachEvent){
  38.         var f=function(){init.call(window,window.event);};
  39.         window.attachEvent('onload',f);
  40.         window[init.toString()+'load']=f;
  41.     }else{
  42.         window['onload']=init;
  43.     }
  44. })();
Ese codigo se lo coloca en el heade y para usarlo, se coloca en un atrubuto llamado "rel" se coloca "easyurl" y listo! ejemplo:
Código html:
Ver original
  1. <p><a href="#abajo" id="arriba" rel="easyurl">Abajo</a></p>
  2. <p>&nbsp;</p>
  3. <p>&nbsp;</p>
  4. <p>&nbsp;</p>
  5. <p>&nbsp;</p>
  6. <p>&nbsp;</p>
  7. <p>&nbsp;</p>
  8. <p>&nbsp;</p>
  9. <p>&nbsp;</p>
  10. <p>&nbsp;</p>
  11. <p>&nbsp;</p>
  12. <p>&nbsp;</p>
  13. <p>&nbsp;</p>
  14. <p>&nbsp;</p>
  15. <p>&nbsp;</p>
  16. <p>&nbsp;</p>
  17. <p>&nbsp;</p>
  18. <p>&nbsp;</p>
  19. <p>&nbsp;</p>
  20. <p>&nbsp;</p>
  21. <p>&nbsp;</p>
  22. <p>&nbsp;</p>
  23. <p>&nbsp;</p>
  24. <p><a href="#arriba" id="abajo" rel="easyurl">Arriba</a></p>
  25. <p>&nbsp;</p>
  26. <p>&nbsp;</p>
  27. <p>&nbsp;</p>
  28. <p>&nbsp;</p>
  29. <p>&nbsp;</p>
  30. <p>&nbsp;</p>
  31. <p>&nbsp;</p>
  32. <p>&nbsp;</p>
  33. <p>&nbsp;</p>
  34. <p>&nbsp;</p>
  35. <p>&nbsp;</p>
  36. <p>&nbsp;</p>
  37. <p>&nbsp;</p>
  38. <p>&nbsp;</p>
  39. <p>&nbsp;</p>
  40. <p>&nbsp;</p>
  41. <p>&nbsp;</p>
  42. <p>&nbsp;</p>
  43. <p>&nbsp;</p>
  44. <p>&nbsp;</p>
En el "href" se pone el id el elemento a anclar (con el # al empiezo).
DEMO: http://halfmusic.com/EasyUrlDemo.html
Gracias
Salu2

EDITO: Modifique el codigo para que ande horizontal y verticalmente. La demo esta con el codigo viejo. Solo lo probe en firefox porque no tengo otro.
__________________
Half Music - www.halfmusic.com

Última edición por pato12; 05/07/2010 a las 16:33