Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] links href="#" dentro de la misma página

Estas en el tema de links href="#" dentro de la misma página en el foro de Javascript en Foros del Web. Hola amigos! El otro día me topé con esta página web - http://www.producteev.com/ y me pareció ciertamente interesante el hecho de que los links de ...
  #1 (permalink)  
Antiguo 03/08/2013, 17:10
 
Fecha de Ingreso: marzo-2009
Mensajes: 83
Antigüedad: 15 años, 1 mes
Puntos: 2
links href="#" dentro de la misma página

Hola amigos!
El otro día me topé con esta página web -http://www.producteev.com/ y me pareció ciertamente interesante el hecho de que los links de la web se muevan por la misma página.

De manera casera (y si, rudimentaria) sé que puedes dirigirte a una div poniendo
Código:
<a href="#nombreDiv">Enlace</a>
pero me gustaría saber:
1- ¿cómo podría conseguir un efecto deslizamiento parecido?
2- ¿existe manera de que al clickar en los enlaces que comentaba, en la barra de direcciones no se añada "#nombreDiv"?

Muchas gracias por adelantado! Un saludo enorme!
  #2 (permalink)  
Antiguo 04/08/2013, 00:01
 
Fecha de Ingreso: diciembre-2010
Ubicación: en la luna
Mensajes: 108
Antigüedad: 13 años, 5 meses
Puntos: 8
Respuesta: links href="#" dentro de la misma página

para el deslizamiento suave utiliza smooth scroll y lo de no añadir el ancla no lose xD
__________________
prefiero morir antes de rendirme.
  #3 (permalink)  
Antiguo 04/08/2013, 07:36
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: links href="#" dentro de la misma página

y por qué no javascript puro?? y matamos 3 pájaros de un tiro

Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>scroll de página</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
border: none;
position: relative;
}



body {
width: 100%;
height: 100%;
}



div#header {
z-index: 99;
}



div#header div#base-menu {
height: 5em;
}



div#header div#menu {
background-color: rgb(17, 9, 9);
color: rgb(224, 220, 220);
width: 100%;
height: 5em;
position: fixed;
left: 0;
top: 0;
}



div#header div#menu ul {
overflow: hidden;
}




div#header div#menu > ul li {
list-style: none;
float: left;
text-align: center;
}



div#header div#menu > ul li {
width: 8.92em;
height: 3.5em;
padding-top: 2em;
color: rgb(224, 220, 220);
font: 0.9em Tahoma;
cursor: pointer;
}


div#secciones > div.seccion {
width: 100%;
color: rgb(255, 255, 255);
}


div#secciones > div.rojo {
height: 1000px;
background-color: rgb(255, 0, 0);
}


div#secciones > div.verde {
height: 500px;
background-color: rgb(0, 128, 0);
}


div#secciones > div.azul {
height: 700px;
background-color: rgb(0, 0, 255);
}
</style>
<script type="text/javascript">
var velocidadScroll = 0.6; // velocidad con la que se realizará el scroll automático - rango de valores (0.1 - 1.5). siendo 0.1 la velocidad más alta
var empiezaDeceleracion = 400; // px que restan hasta alcanzar el objeto en el scroll automático. una vez que la diferencia es menor a la indicada, empieza la deceleración


var lib = {

Evento : function(elemento, nomevento, fnc) {

if (elemento.addEventListener) {

elemento.addEventListener(nomevento, fnc, false);

} else if (elemento.attachEvent) {

elemento.attachEvent('on' + nomevento, function() { fnc.call(elemento, window.event);});

}
},




cssComputado : function(obj, styleProp) {

if (obj == null) { return 0; }

if (window.getComputedStyle) {

var valor = window.getComputedStyle(obj, null)[styleProp];

} else if (obj.currentStyle) {

var valor = (parseInt(obj.currentStyle[styleProp], 10) * 16) + 'px';
}

return valor;

},




alturaScroll : function() {

return self.pageYOffset || (document.documentElement.scrollTop + document.body.scrollTop);
}

}




function init() {

var menu = document.querySelector('#lista').getElementsByTagN ame('li');
var seccion = document.querySelectorAll('.seccion');

for (var i = 0; i < menu.length; i++) {

(function(i) {

lib.Evento(menu[i], 'click', function() {scrollAncla(seccion[i]);});

})(i);

}
}





function scrollAncla(elem) {

var offsetTop = -parseInt(lib.cssComputado(document.querySelector(' #base-menu'), 'height'), 10);


while(elem.offsetParent) {

offsetTop += elem.offsetTop;
elem = elem.offsetParent;

}


var empieza = new Date().getTime();
var actT = lib.alturaScroll();
var controlaVelocidad = (actT > offsetTop) ? parseInt(actT * velocidadScroll, 10) : parseInt(offsetTop * velocidadScroll, 10);
var intervalo = false;
var scrll = actT;
var scrll2 = 0;

(function scrolea() {

setTimeout(function() {

var ahora = new Date().getTime();

if ((ahora - empieza) < controlaVelocidad && Math.abs(scrll - offsetTop) > empiezaDeceleracion) {

var avance = ((ahora - empieza) / controlaVelocidad);
scrll = (actT > offsetTop) ? Math.floor(actT - ((actT - offsetTop) * avance)) : Math.ceil(actT + ((offsetTop - actT) * avance));
window.scrollTo(0, scrll);
scrolea();

} else {

var empieza2 = new Date().getTime();

(function decelera() {

setTimeout(function() {

var ahora2 = new Date().getTime();

if ((ahora2 - empieza2) < (empiezaDeceleracion * 3)) {

var avance2 = ((ahora2 - empieza2) / (empiezaDeceleracion * 3));
scrll2 = (scrll > offsetTop) ? Math.floor(scrll - ((scrll - offsetTop) * avance2)) : Math.ceil(scrll + ((offsetTop - scrll) * avance2));
window.scrollTo(0, scrll2);
decelera();

} else {

var avance2 = 1;
scrll2 = (scrll > offsetTop) ? Math.floor(scrll - ((scrll - offsetTop) * avance2)) : Math.ceil(scrll + ((offsetTop - scrll) * avance2));
window.scrollTo(0, scrll2);

}

}, 1)

})();

}

}, 1);
})();

}

lib.Evento(window, 'load', init);
</script>
</head>
<body>

<div id="header">
<div id="base-menu"></div>
<div id="menu">
<ul id="lista">
<li>sección 1</li>
<li>sección 2</li>
<li>sección 3</li>
</ul>
</div>
</div>


<div id="secciones">
<div class="seccion rojo">sección 1</div>
<div class="seccion verde">sección 2</div>
<div class="seccion azul">sección 3</div>
</div>

</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 29/09/2014 a las 14:48
  #4 (permalink)  
Antiguo 05/08/2013, 09:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 83
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: links href="#" dentro de la misma página

Hola a todos y gracias por contestar! He probado la solución que me comentaba redvirus13 acerca del smooth scroll y la verdad es q funciona muy bien. Es la idea que buscaba.

Probaré también utilizar javascript puro como comentas IsaBelM, pero por el momento me sirve lo que tengo.

Dejo el enlace desde donde me informé por si a alguien le puede interesar. (http://www.dwuser.com/education/cont...your-webpages/)
Un saludo!

Etiquetas: css, href, links, página
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 02:58.