Foros del Web » Programando para Internet » Javascript »

Scroll por id

Estas en el tema de Scroll por id en el foro de Javascript en Foros del Web. Hola, Me gustaria que cuando hago click en un link de id tipo "#div1" la página no bajase de golpe, si no que tardase un ...
  #1 (permalink)  
Antiguo 30/12/2011, 06:31
 
Fecha de Ingreso: octubre-2011
Mensajes: 32
Antigüedad: 12 años, 6 meses
Puntos: 0
Scroll por id

Hola,
Me gustaria que cuando hago click en un link de id tipo "#div1" la página no bajase de golpe, si no que tardase un poco más haciendo scroll.
Se puede hacer con javascript ¿no?
¿Me he explicado bien?
Gracias
__________________
<?php print("Php2"); ?>
  #2 (permalink)  
Antiguo 30/12/2011, 06:43
Avatar de ryugen
Colaborador
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario, Santa Fe
Mensajes: 350
Antigüedad: 15 años, 8 meses
Puntos: 187
Respuesta: Scroll por id

podrías animar el scroll utilizando jquery
Código Javascript:
Ver original
  1. function scrollTo(selector) {
  2.     var destination = $(selector+':first').offset().top;
  3.     $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination - 50 }, 1000);
  4. }

o agregar un interval en el on click del link
  #3 (permalink)  
Antiguo 30/12/2011, 07:20
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Scroll por id

con puro javascript
Cita:
<html>
<head>
<script type="text/javascript">
(function(){
var init=function(){
var tags=document.getElementsByTagName('*'),doms=[],intervalo=false,timeout=false,time=80; // En este ultimo (time), se define la velocidad.
for(var i=0;i<tags.length;i++){
if(tags[i].getAttribute('rel')!=null){
if(tags[i].getAttribute('rel')=='easyurl'){
doms.push(tags[i]);
}
}
}
for(var i=0;i<doms.length;i++){
doms[i].onclick=function(){
var id=this.getAttribute('href').split('#')[1],dom=document.getElementById(id),offsetTop=0,offse tLeft=0,elm=dom;
while(elm.offsetParent){
offsetLeft+=elm.offsetLeft;
offsetTop+=elm.offsetTop;
elm=elm.offsetParent;
}
if(intervalo)clearInterval(intervalo);
if(timeout)clearTimeout(timeout);
var actT=document.documentElement.scrollTop?document.d ocumentElement.scrollTop:document.body.scrollTop;
var actL=document.documentElement.scrollLeft?document. documentElement.scrollLeft:document.body.scrollLef t;
time=time>1?time:2;
intervalo=setInterval(function(){
if(actT==offsetTop&&actL==offsetLeft){clearInterva l(intervalo);clearTimeout(timeout);}
actT=(actT>offsetTop?Math.floor(actT-((actT-offsetTop)/time)):Math.ceil(actT+((offsetTop-actT)/time)));
actL=(actL>offsetLeft?Math.floor(actL-((actL-offsetLeft)/time)):Math.ceil(actL+((offsetLeft-actL)/time)));
window.scrollTo(actL,actT);
},1);
timeout=setTimeout(function(){clearInterval(interv alo);},time*1000); // ESTO ES POR SI SE TRABA, EN UNOS SEGUNDOS LO LIBERAMOS
return false;
};
}
};
if(window.addEventListener){
window.addEventListener('load',init,false);
}else if(window.attachEvent){
var f=function(){init.call(window,window.event);};
window.attachEvent('onload',f);
window[init.toString()+'load']=f;
}else{
window['onload']=init;
}
})();
</script>
</head>
<body>
<p><a href="#abajo" id="arriba" rel="easyurl">Abajo</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="#arriba" id="abajo" rel="easyurl">Arriba</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 30/12/2011, 08:27
 
Fecha de Ingreso: octubre-2011
Mensajes: 32
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Scroll por id

haciendo esta prueba rapida no funciona:
Código HTML:
Ver original
  1. <script>function scrollTo(selector) {
  2.     var destination = $(selector+':first').offset().top;
  3.     $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination - 50 }, 1000);
  4. }</script>
  5. dsdsfsd
  6.  
  7. <br>
  8.  
  9. <a href="javascript:scrollTo('#uno')">dsff</div></a>
  10.  
  11.  
  12. <br>
  13. f<br>
  14. f<br>
  15. f<br>
  16. f<br>
  17. f<br>
  18. f<br>
  19. f<br>
  20. f<br>
  21. f<br>
  22. f<br>
  23. f<br>
  24. f<br>
  25. f<br>
  26. f<br>
  27. f<br>
  28. f<br>
  29. f<br>
  30. f<br>
  31. f<br>
  32. f<br>
  33. f<br>
  34. f<br>
  35. f<br>
  36. f<br>
  37. f<br>
  38. f<br>
  39. f<br>
  40. f<br>
  41. f<br>
  42. f<br>
  43. f<br>
  44. f<br>
  45. f<br>
  46. f<br>
  47. f<br>
  48. f<br>
  49. f<br>
  50. f<br>
  51. f<br>
  52. f<br>
  53. f
  54. <div id="uno">ff<br></div>
__________________
<?php print("Php2"); ?>
  #5 (permalink)  
Antiguo 30/12/2011, 08:54
Avatar de ryugen
Colaborador
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario, Santa Fe
Mensajes: 350
Antigüedad: 15 años, 8 meses
Puntos: 187
Respuesta: Scroll por id

requieres de jQuery como dije antes. Sino puedes disponer de el, puedes utilizar lo que te escribió IsaBelM

Etiquetas: scroll
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:50.