Foros del Web » Programando para Internet » Jquery »

[APORTE] efectos sin jquery

Estas en el tema de [APORTE] efectos sin jquery en el foro de Jquery en Foros del Web. cansada de ver como se mal usa este framework para crear pequeños efectos, me he decido a abrir este post en el que iré aportando ...

  #1 (permalink)  
Antiguo 11/01/2013, 14:49
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
[APORTE] efectos sin jquery

cansada de ver como se mal usa este framework para crear pequeños efectos, me he decido a abrir este post en el que iré aportando efectos

slider de imágenes ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style>
* {
	margin: 0;
	padding: 0;
	border: none;
	position: relative;
}

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


#slider_contenedor {
	border: 1px solid #000;
	width: 25rem;  /*ancho de la imagen */
	height: 9.25rem;  /*alto de la imagen */
	background: #000;
	margin: 0 auto;
	overflow: hidden;
}



#slider_contenedor ul {
	list-style-type: none;
	white-space: nowrap;
}


#slider_contenedor li {
	display: inline-block;
}


#slider_contenedor img {
	width: 100%;
	height: auto;
}


#slider_contenedor > span {
    width: auto;
    height: 1.5rem;
    position: absolute;
    top: 44%;
    z-index: 99;
    cursor: pointer;
}


#slider_contenedor > span.der{
    right: 1%;
}

#slider_contenedor > span.der:after{
    content: "\25B6 \25B6";
}


#slider_contenedor > span.izq{
    left: 1%;
}


#slider_contenedor > span.izq:after{
    content: "\25C0 \25C0";
}
</style>
<script>
var imageSlider = {

	posiciones : [0],
    clicks: 0,
    indiceAnterior : 0,
    posInicial: 0,


	estableceValoryEventos: function() {


		this.UL = document.querySelector('#slider_contenedor ul');
		var ILS = document.querySelectorAll('#slider_contenedor li'),
		    totalILS = ILS.length,
		    porcentajeAvance = 0;

		for (var i = 1; i < totalILS; i++) {

			porcentajeAvance = (100 * i);
	        this.posiciones.push(porcentajeAvance);
    	}

		var spans = document.querySelectorAll('#slider_contenedor span');
		spans[0].addEventListener('click', function() {imageSlider.mover(0)}, false);
		spans[1].addEventListener('click', function() {imageSlider.mover(1)}, false);
	},


	mover : function(bol){

		this.clicks += (bol == 0) ? this.posiciones.length - 1 : bol;
        var indiceActual = this.clicks % this.posiciones.length;
        var posicionFinal = this.posiciones[indiceActual]

		if (this.indiceAnterior <= indiceActual) { // scrolea hacia la izquierda

            (function desplazar() {

                if (imageSlider.posInicial >= posicionFinal) return;

                setTimeout(function() {

                    imageSlider.posInicial += 1;
                    imageSlider.UL.style.left = -imageSlider.posInicial + '%';
                    desplazar();

                }, 1);

            })();

            this.indiceAnterior = indiceActual;

        } else {


            (function desplazar() {

                if (imageSlider.posInicial <= posicionFinal) return;

                setTimeout(function() {

                    imageSlider.posInicial -= 1;
                    imageSlider.UL.style.left = -imageSlider.posInicial + '%';
                    desplazar();

                }, 1);

            })();

            this.indiceAnterior = indiceActual;
        }
	}
}

window.addEventListener('load', function() {imageSlider.estableceValoryEventos()}, false);
</script>
</head>
<body>

	<div id="slider_contenedor">
		<span class="izq"></span>
		<span class="der"></span>
		<ul>
			<li><img src="http://facebookportadas.com/imagenes/comotellamas.jpg" alt="i0">
			<li><img src="http://facebookportadas.com/imagenes/inocente.jpg" alt="i1">
			<li><img src="http://facebookportadas.com/imagenes/minecraft2.jpg" alt="i2">
			<li><img src="http://facebookportadas.com/imagenes/diloquesientes.jpg" alt="i3">
		</ul>
	</div>
		
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 28/08/2016 a las 12:08
  #2 (permalink)  
Antiguo 11/01/2013, 14:53
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

slider automático ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
border: none;
position: relative;
}

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

a {outline: 0;}


.cont{
width: auto;
height: auto;
}


.cont > div {
display: inline-block;
vertical-align: top;
}



div#contenedor{
width: 400px;
height: 250px;
margin: 0 auto;
overflow: hidden;
border: 1px solid #CCC;
}



div#contenedor div.slider{
width: 200%; /* equivale al ancho de 2 imágenes. no tocar */
position: relative;
left: 0;
top: 0;
}


div#contenedor div.slider img {
width: 400px; /* mismo width de #contenedor */
height: 250px; /* mismo height de #contenedor */
float: left;
}
</style>
<script type="text/javascript">
function Evento(elemento, nomevento, fnc) {

  	if (elemento.addEventListener) {

		elemento.addEventListener(nomevento, fnc, false);

    	} else if (elemento.attachEvent) {

		elemento.attachEvent('on' + nomevento, fnc);

  	}
}



var imgslide = [ 
new imagenes('http://facebookportadas.com/imagenes/comotellamas.jpg'),
new imagenes('http://facebookportadas.com/imagenes/inocente.jpg'),
new imagenes('http://facebookportadas.com/imagenes/minecraft2.jpg'),
new imagenes('http://facebookportadas.com/imagenes/diloquesientes.jpg')
];



function imagenes(img, txt) {
	this.imagen = img;
}



var preImg = [];

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

	preImg[i] = new Image();
	preImg[i].src = imgslide[i].imagen;
}


function mover(posInicial, posFinal, slider, indiceImg){

	if (posInicial <= posFinal) {

		var siguienteImg = document.createElement('img');
		siguienteImg.setAttribute('src', preImg[indiceImg].src);
		slider.appendChild(siguienteImg);

		(function desplazar() { 

			setTimeout(function(){

				if (posInicial >= posFinal) {

					slider.removeChild(slider.getElementsByTagName('img')[0]);
					slider.style.left = 0;
					return;
				}

				posInicial += 2;
				slider.style.left = -posInicial + '%';
				desplazar();

			},6);

		})();
	}


	setTimeout(function() {

		var nuevoIndice = parseInt(indiceImg+1) % imgslide.length;

		mover(0, posFinal, slider, nuevoIndice);

	},3000);
}


function inicia() {

	setTimeout(function() {

		var slider = document.querySelector('div.slider');

		mover(0, 100, slider, 1);

	}, 3000);
}


Evento(window, 'load', inicia);
</script>
</head>
<body>

<div id="contenedor">

<div class="slider">
	<img src="http://facebookportadas.com/imagenes/comotellamas.jpg" alt="i0" />
</div>

</div>

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

Última edición por IsaBelM; 24/10/2013 a las 05:21
  #3 (permalink)  
Antiguo 11/01/2013, 14:56
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

slider con tabs ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
border: none;
position: relative;
}

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


div#contenedor{
border: 1px solid #000;
width: 400px;
height: 250px;
background: #000;
margin: 0 auto;
overflow: hidden;
}


div#contenedor span.tab{
text-align: center;
display: inline-block;
width: 95px;
background-color: rgb(250, 6, 6);
color: #FFF;
border: 1px solid rgb(184, 184, 13);
cursor: pointer;
}


div#contenedor div.slider{
width: 200%; /* este width es sobrescrito en el onload. de inicio se le asigna 200% que equivale a 2 imágenes */
position: relative;
left: 0;
top: 0;
}


div#contenedor div.slider img {
width: 400px; /* mismo width de #contenedor */
height: 228px;
float: left;
}
</style>
<script type="text/javascript">
var namespaceSlider = {

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); });
  	}
}



estableceValoryEventos: window.onload = function() {
var selectorSlider = document.querySelector('div.slider');
var n_Imagenes = selectorSlider.getElementsByTagName('img').length;
selectorSlider.style.width = parseInt(n_Imagenes * 100, 10) + '%';

var spans = document.querySelectorAll('span.tab');
for (var j = 0; j < spans.length; j++) {
namespaceSlider.Evento(spans[j], 'click', function() {namespaceSlider.mover(this.id.split('_')[1])});
}

},



posInicial: 0,
anchoImg: 100,

mover : function(tab){

var posFinal = namespaceSlider.anchoImg * parseInt(tab, 10);
var slider = document.querySelector('div.slider');

	if (namespaceSlider.posInicial >= posFinal) { // escrolea hacia la izquierda

		(function desplazar() { 
			setTimeout(function(){

				if(namespaceSlider.posInicial <= posFinal) return;
				namespaceSlider.posInicial -= 2;
				slider.style.left = -namespaceSlider.posInicial + '%';
				desplazar();
			},6);
		})();


	} else { // escrolea hacia la derecha


		(function desplazar() { 
			setTimeout(function(){

				if(namespaceSlider.posInicial >= posFinal) return;
				namespaceSlider.posInicial += 2;
				slider.style.left = -namespaceSlider.posInicial + '%';
				desplazar();
			},6);
		})();
	}
}
}
</script>
</head>
<body>

<div id="contenedor">
<span class="tab" id="s_0">IMG1</span>
<span class="tab" id="s_1">IMG2</span>
<span class="tab" id="s_2">IMG3</span>
<span class="tab" id="s_3">IMG4</span>

<div class="slider">
<img src="http://facebookportadas.com/imagenes/comotellamas.jpg" alt="i0" />
<img src="http://facebookportadas.com/imagenes/inocente.jpg" alt="i1" />
<img src="http://facebookportadas.com/imagenes/minecraft2.jpg" alt="i2" />
<img src="http://facebookportadas.com/imagenes/diloquesientes.jpg" alt="i3" />

</div>

</div>

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

Última edición por IsaBelM; 03/09/2013 a las 07:49
  #4 (permalink)  
Antiguo 11/01/2013, 15:54
Avatar de ryugen
Colaborador
 
Fecha de Ingreso: agosto-2008
Ubicación: Rosario, Santa Fe
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 187
Respuesta: [APORTE] efectos sin jquery

Gracias por el APORTE.

IsaBelM sería bueno si pudieras complementar los efectos, con un ejemplo vivo hosteado en algunos de los playground online que existen. Por ejemplo:

http://jsfiddle.net/Z2Pd3/

En ese link está el primer efecto, para que se pueda ver en funcionamiento.

Sería bueno también saber la compatibilidad para cada uno de los mismos.
  #5 (permalink)  
Antiguo 11/01/2013, 16:59
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Con la excusa de darle uso al Host que Google Drive proporciona (y en respuesta a lo sugerido por Ryugen), si les parece voy a ir publicando el muy buen aporte de IsabelM.

En unos diás voy a poner un indice y una tabla de compatibilidades, por ahora

http://gdriv.es/emprear/IsabelM
Si hay alguna objeción o propuesta superadora, se aceptan sugerencias.

Para no terminar en algo confuso, propongo que todos los aportes se limiten por ahora, a lograr efectos visuales sin jQuery Si hubiese otro tipo de aportes, que se cree otro post.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 12/01/2013, 06:27
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por ryugen Ver Mensaje
IsaBelM sería bueno si pudieras complementar los efectos, con un ejemplo vivo hosteado en algunos de los playground online que existen. Por ejemplo:
pensé en ello, pero no me gusta mucho estos editores en línea. creo que la opción de emprear es mas acertada

Cita:
Iniciado por ryugen Ver Mensaje
Sería bueno también saber la compatibilidad para cada uno de los mismos.
no suelo entregar códigos que no sean cross-browser, aunque tienes razón y no está demás


Cita:
Iniciado por emprear Ver Mensaje
Con la excusa de darle uso al Host que Google Drive proporciona (y en respuesta a lo sugerido por Ryugen), si les parece voy a ir publicando el muy buen aporte de IsabelM.

En unos diás voy a poner un indice y una tabla de compatibilidades, por ahora

http://gdriv.es/emprear/IsabelM
Si hay alguna objeción o propuesta superadora, se aceptan sugerencias.

Para no terminar en algo confuso, propongo que todos los aportes se limiten por ahora, a lograr efectos visuales sin jQuery Si hubiese otro tipo de aportes, que se cree otro post.

Saludos
+1
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 26/09/2014 a las 07:27
  #7 (permalink)  
Antiguo 12/01/2013, 07:05
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Ok, yo voy a probarlas por lo de la compatibilidad, pero si alguno lo hace por su cuenta, antes del cierre del body inserten este bloque

Código HTML:
Ver original
  1. <!-- ignorar -->
  2. <script type="text/javascript">
  3. //<![CDATA[
  4. var browserList = { //Indicar compatibilidad si fué probada 1=compatible
  5. 'Firefox':1,
  6. 'IE8':0,
  7. 'IE9':1,
  8. 'Chrome':1,
  9. 'Opera':1,
  10. 'Safari(win)':1
  11. },
  12. // no modificar desde aquí
  13. result = ''; for(var browser in browserList) {result += browserList[browser] === 1 ? browser + ' ' : '';};
  14. //]]>
  15. <script type="text/javascript" src="code/pie.js"></script>
  16. <!-- ignorar -->
solo modifiquen 1/0 según sea compatible al inicio de la script. Yo subo el html y creo un zip para la descarga.

Para hacerlo más ordenado, 1 sugerencias más
que el título del documento coincida exactamente con el nombre dado al efecto.

Saludos...
y se esperan más efectos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 12/01/2013 a las 16:03 Razón: código de compatibilidad actualizado
  #8 (permalink)  
Antiguo 12/01/2013, 07:42
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: [APORTE] efectos sin jquery

Código Javascript:
Ver original
  1. // compatible
  2. // 1 = compatible 0= no compatible
  3. var FF = 1;
  4. var IE8 = 0;
  5. var IE9 = 1;
  6. var CH = 1;
  7. var OP = 1;
  8. *
  9. if(FF == 1){FF = "Firefox ";}else{FF = "";}
  10. if(IE8 == 1){IE8 = "IE8 ";}else{IE8 = "";}
  11. if(IE9 == 1){IE9 = "IE9 ";}else{IE9 = "";}
  12. if(CH == 1){CH = "Chrome ";}else{CH = "";}
  13. if(OP == 1){OP = "Opera";}else{OP = "";}
  14. function compat(){
  15. document.write(FF + IE8 + IE9 + CH + OP);
  16. }


Así queda más limpio:

Código Javascript:
Ver original
  1. var browserList = {
  2.                 Firefox:    1,
  3.                 IE8:        0,
  4.                 IE9:        1,
  5.                 CH:         1,
  6.                 OP:         1
  7.             },
  8.             result = '';
  9.  
  10.             for (var browser in browserList) {
  11.                 result += browserList[browser] === 1 ? browser + ' ' : '';
  12.             };
  13.  
  14.             document.write(result);
__________________
Web Designer.
Themes-Up!, próximamente
  #9 (permalink)  
Antiguo 12/01/2013, 15:07
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

yo agregaría otro navegador. el olvidado safari
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #10 (permalink)  
Antiguo 12/01/2013, 16:01
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por IsaBelM Ver Mensaje
yo agregaría otro navegador. el olvidado safari
Agregado Safari (5 para Windows, que es d lo que dispongo).
Simplifique el codigo de compatibilidad a instancias de @fishdesign y un par de cositas, en concreto si verifican la compatibilidad, antes del cierre del body insertar este bloque

Código Javascript:
Ver original
  1. <!-- ignorar -->
  2. <script type="text/javascript">
  3. //<![CDATA[
  4. var browserList = { //Indicar compatibilidad si fué probada 1=compatible
  5. 'Firefox':1,
  6. 'IE8':0,
  7. 'IE9':1,
  8. 'Chrome':1,
  9. 'Opera':1,
  10. 'Safari(win)':1
  11. },
  12. // no modificar desde aquí
  13. result = ''; for(var browser in browserList) {result += browserList[browser] === 1 ? browser + ' ' : '';};
  14. //]]>
  15. </script>
  16. <script type="text/javascript" src="code/pie.js"></script>
  17. <!-- ignorar -->
modificando el valor 1/0 en browserList

Cuando se junten unas cuantas, voy a trabajar sobre la página indice.

Una propuesta final:
Basta de mejoras y más ejemplos !!!!!


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 14/01/2013, 15:28
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

Rotador de Imágenes con Fade ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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>Rotador de Imágenes con Fade</title>
<style type="text/css">
* {
	margin: 0;
	padding: 0;
	border: none;
	position: relative;
}


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


.contenedor {
	width: 62.25%; /* 850px; mismo ancho que las imágenes */
	height: 49%; /* 315px; mismo alto que las imágenes */
	background: #FFF url('https://googledrive.com/host/0B5cDQ-G3aVMQMkdaelNsdTZ6TDQ/IsabelM/img/ajax-loader.gif') no-repeat center;
	border: 1px solid #000;
	margin: 0 auto;
}


.imgFade {
	width: 100%;
	height: 100%;
	position: absolute;
	opacity: 0;
	filter: alfa(opacity=0);
	z-index: 0;
}


.botonera {
	width: 100%;
	position: absolute;
	bottom: 2%; /*10px;*/
	text-align: center;
	z-index: 9999;
}


.boton {
	width: 15px;
	height: 15px;
	display: inline-block;
	margin: 0 1%;
	background-color: rgba(255, 255, 255, 0);
	color: rgb(235, 235, 235);
	font: bold 11px Verdana;
	cursor: pointer;
	border: 1px solid rgb(44, 44, 44);
	border-radius: 9px;
}
</style>
<script type="text/javascript">
var lib = {

    Evento : function(elemento, nomevento, fnc) {

        if (elemento.addEventListener) {

            elemento.addEventListener(nomevento, fnc, false);

            } else if (elemento.attachEvent) {

            elemento.attachEvent('on' + nomevento, fnc);

        }
    }
}


var rotadorImg = {

	arrImagenes : [
		'http://facebookportadas.com/imagenes/comotellamas.jpg',
		'http://facebookportadas.com/imagenes/inocente.jpg',
		'http://facebookportadas.com/imagenes/minecraft2.jpg',
		'http://facebookportadas.com/imagenes/diloquesientes.jpg'
	],
	imagenes : [],
	nImg : 0,
	intervaloFade : null,
	intervaloRot : null,
	iteracion : 0,


	rotadorImgInit : function() {

		rotadorImg.nImg = rotadorImg.arrImagenes.length;
	
		var fragmento = document.createDocumentFragment();


		var botonera = document.createElement('div');
		botonera.setAttribute('class', 'botonera');

		for (var i = 0; i < rotadorImg.nImg; i++) {

		//precarga de imágenes

			rotadorImg.imagenes[i] = new Image();
			rotadorImg.imagenes[i].src = rotadorImg.arrImagenes[i];

		//precarga de imágenes

			var imagen = rotadorImg.creaImg(i);
			fragmento.appendChild(imagen);

			var boton = rotadorImg.creaPag(i); 
    		botonera.appendChild(boton);
		}

		var botones = fragmento.appendChild(botonera);

		document.querySelector('.contenedor').appendChild(fragmento);

  		rotadorImg.fadeYrotacion(0);
	},




	creaImg : function(indice) {

    	var img = document.createElement('img');
    	img.setAttribute('src', rotadorImg.arrImagenes[indice]);
    	img.setAttribute('class', 'imgFade');

    	return img;
	},



	creaPag : function(indice) {

    	var boton = document.createElement('span');
	    boton.setAttribute('class', 'boton');
	    boton.textContent = (indice + 1); // los números
	    lib.Evento(boton, 'click', function() {rotadorImg.rotadorClick(indice);});

    	return boton;
	},



	fadeYrotacion : function (opac, indice, bol) {

		if (bol) {

			var este = indice % rotadorImg.nImg;
			var estaImg = document.querySelectorAll('.imgFade')[este];

			estaImg.style.opacity = '';
			estaImg.style.filter = 'alpha(opacity = 0)';
			document.querySelectorAll('.boton')[este].style.backgroundColor = 'rgb(255, 0, 0)';
			estaImg.style.zIndex = rotadorImg.iteracion;

		} else {

			clearInterval(rotadorImg.intervaloRot);

			var este = rotadorImg.iteracion % rotadorImg.nImg;
			var estaImg = document.querySelectorAll('.imgFade')[este];

			estaImg.style.opacity = '';
			estaImg.style.filter = 'alpha(opacity = 0)';
			document.querySelectorAll('.boton')[este].style.backgroundColor = 'rgb(255, 0, 0)';
			estaImg.style.zIndex = ++rotadorImg.iteracion;
		}


		rotadorImg.intervaloFade = setInterval(function() {

			if (opac <= 100) { 

				rotadorImg.fadeIn(estaImg, opac);
				opac += 2.5;

			} else {

				clearInterval(rotadorImg.intervaloFade);

				rotadorImg.intervaloRot = setInterval(function() {

					rotadorImg.rotador(estaImg);

				}, 2000);
			}

		}, 60);

	},





	fadeIn : function(estaImg, opac) {

		estaImg.style.opacity = opac/100;
	    estaImg.style.filter = 'alpha(opacity =' + opac + ')';
	},





	rotador : function(estaImg) {

		document.querySelectorAll('.boton')[(rotadorImg.iteracion - 1) % rotadorImg.nImg].style.backgroundColor = '';

		estaImg.style.zIndex = rotadorImg.iteracion;

		rotadorImg.fadeYrotacion(0);
	},




	rotadorClick : function(indice) {

		var este = (rotadorImg.iteracion - 1) % rotadorImg.nImg;

		document.querySelectorAll('.boton')[este].style.backgroundColor = '';

		if (indice < este) {

			rotadorImg.iteracion += ((indice + rotadorImg.nImg) - este);

		} else {

			rotadorImg.iteracion += Math.abs(este - indice);
		}
		

		clearInterval(rotadorImg.intervaloFade);
		clearInterval(rotadorImg.intervaloRot);

		document.querySelectorAll('.imgFade')[indice].style.zIndex = rotadorImg.iteracion;

		rotadorImg.fadeYrotacion(0, indice, true);
	}

};


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

<div class="contenedor"></div>

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

Última edición por IsaBelM; 24/09/2014 a las 15:11
  #12 (permalink)  
Antiguo 14/01/2013, 17:42
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Rotador de Imágenes con Fade----> compatibilidad : todos los navegadores modernos incluido ie8

Ya fué incluido.

https://googledrive.com/host/0B5cDQ-...-con-fade.html

Hice la siguiente modificación/mejora, cambié las imágenes, ya que decidí agregar en la carpeta img ( https://googledrive.com/host/0B5cDQ-G3aVMQMkdaelNsdTZ6TDQ/IsabelM/img/ ) una serie de imágenes para que usen en los ejemplos, están optimizadas y al estar en el mismo server mejora la carga.
Cuando incluyan imágenes en el código, recuerden incluir la ruta completa. así los que bajen la demo ven el efecto funcionando, repito, la ruta completa a la carpeta de imágenes es
https://googledrive.com/host/0B5cDQ-G3aVMQMkdaelNsdTZ6TDQ/IsabelM/img/
El nombre incluye las medidas (ancho x alto). Después voy a agregar algunas apaisadas.

A propósito , muy bueno @IsabelM


__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 14/01/2013 a las 18:24
  #13 (permalink)  
Antiguo 18/01/2013, 06:16
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

Transiciones ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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>Transición de Imágenes</title>
<style type="text/css">
* {
margin: 0; 
padding: 0;
border: none;
position: relative;
}

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


body {
background-color: rgb(109, 106, 107);
}


.contenedor {
width: 160px;
height: 30px; /* height + border de .contenedor span.url a img */
margin: 0 auto;
padding-top: 50px;
}



.contenedor span {
float:left;
}


.contenedor span.url {
width: 26px; /* mismo ancho que en .contenedor span.url a img */
height: 28px; /* mismo alto que en .contenedor span.url a img */
margin: 0 7px;
}


.contenedor span.url a img {
width: 26px; /* editable - ancho mínimo de las imágenes */
height: 28px; /* editable - alto mínimo de las imágenes */
max-width: 90px; /* editable - ancho máximo de las imágenes */
max-height: 97px; /* editable - alto máximo de las imágenes */
border: 1px solid #FFF;
}
</style>
<script type="text/javascript">
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.currentStyle) {

		var valor = obj.currentStyle[styleProp];

	} else if (window.getComputedStyle) {

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

	return valor;
},


intervalo : 0,
min_w : 0,
vmin_h : 0,
vmax_w : 0,
max_h : 0,

tiempo : 300 // editable - duración del efecto

};





function inicia() {

var thumb = document.querySelector('.contenedor').getElementsByTagName('img');

lib.min_w = parseInt(lib.cssComputado(thumb[0], 'width'));
lib.min_h = parseInt(lib.cssComputado(thumb[0], 'height'));
lib.max_w = parseInt(lib.cssComputado(thumb[0], 'max-width'));
lib.max_h = parseInt(lib.cssComputado(thumb[0], 'max-height'));

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

		lib.Evento(thumb[i], 'mouseover', function() {this.style.zIndex = 99; transAumenta(this, lib.min_w, lib.min_h, new Date().getTime(), lib.tiempo)});
		lib.Evento(thumb[i], 'mouseout', function() {clearTimeout(lib.intervalo); transDisminuye(this, parseInt(this.style.width), parseInt(this.style.height), new Date().getTime(), lib.tiempo)});

	}

}




function transAumenta(bloque, ancho, alto, tEmpieza, milisegundos) {

var tDuracion =  parseInt(milisegundos/2, 10);
var ahora = new Date().getTime();

	if (ancho < lib.max_w) {
		
		if ((ahora - tEmpieza) < tDuracion) {
			var avance = ((ahora - tEmpieza) / tDuracion);
			var anc = ancho + ((lib.max_w - ancho) * avance);
			bloque.style.width = anc + 'px';
			lib.intervalo = setTimeout(function(){transAumenta(bloque, ancho, alto, tEmpieza, milisegundos)}, 1);

		} else {

			var avance = 1;
			var anc = ancho + ((lib.max_w - ancho) * avance);
			bloque.style.width = anc + 'px';
			lib.intervalo = setTimeout(function(){transAumenta(bloque, anc, alto, new Date().getTime(), milisegundos)}, 1);
		}

		
	} else if (alto < lib.max_h) {

		if ((ahora - tEmpieza) < tDuracion) {
			var avance = ((ahora - tEmpieza) / tDuracion);
			var al = alto + ((lib.max_h - alto) * avance);
			bloque.style.height = al + 'px';
			lib.intervalo = setTimeout(function(){transAumenta(bloque, ancho, alto, tEmpieza, milisegundos)}, 1);

		} else {

			var avance = 1;
			var al = alto + ((lib.max_h - alto) * avance);
			bloque.style.height = al + 'px';
			lib.intervalo = setTimeout(function(){transAumenta(bloque, ancho, al, tEmpieza, milisegundos)}, 1);
		}
	}

}




function transDisminuye(bloque, ancho, alto, tEmpieza, milisegundos) {

var tDuracion =  parseInt(milisegundos/2, 10);
var ahora = new Date().getTime();

	if (alto > lib.min_h) {

		if ((ahora - tEmpieza) < tDuracion) {
			var avance = ((ahora - tEmpieza) / tDuracion);
			var al = alto - ((alto - lib.min_h) * avance);
			bloque.style.height = al + 'px';
			setTimeout(function(){transDisminuye(bloque, ancho, alto, tEmpieza, milisegundos)}, 1);

		} else {

			var avance = 1;
			var al = alto - ((alto - lib.min_h) * avance);
			bloque.style.height = al + 'px';
			setTimeout(function(){transDisminuye(bloque, ancho, al, new Date().getTime(), milisegundos)}, 1);
		}


	} else if (ancho > lib.min_w) {
		
		if ((ahora - tEmpieza) < tDuracion) {
			var avance = ((ahora - tEmpieza) / tDuracion);
			var anc = ancho - ((ancho - lib.min_w) * avance);
			bloque.style.width = anc + 'px';
			setTimeout(function(){transDisminuye(bloque, ancho, alto, tEmpieza, milisegundos)}, 1);

		} else {

			var avance = 1;
			var anc = ancho - ((ancho - lib.min_w) * avance);
			bloque.style.width = anc + 'px';
			setTimeout(function(){transDisminuye(bloque, anc, alto, tEmpieza, milisegundos)}, 1);
		}


	} else {

		bloque.style.zIndex = 'auto';
	}
}


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

<div class="contenedor">
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim01t.jpg" title="i1" alt="i1"></a></span>
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim02t.jpg" title="i2" alt="i2"></a></span>
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim03t.jpg" title="i3" alt="i3"></a></span>
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim05t.jpg" title="i4" alt="i4"></a></span>
</div>

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

Última edición por IsaBelM; 07/09/2013 a las 14:34 Razón: algunas mejoras
  #14 (permalink)  
Antiguo 18/01/2013, 14:46
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por IsaBelM Ver Mensaje
Transiciones ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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>Transición de Imágenes</title>
<style type="text/css">
* {
margin: 0; 
padding: 0;
border: none;
position: relative;
}

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


body {
background-color: rgba(109, 106, 107, 0.85);
}


.contenedor {
width: 160px;
height: 30px; /* height + border de .contenedor span.url a img */
margin: 0 auto;
padding-top: 50px;
}



.contenedor span {
float:left;
}


.contenedor span.url {
width: 26px; /* mismo ancho que en .contenedor span.url a img */
height: 28px; /* mismo alto que en .contenedor span.url a img */
margin: 0 7px;
}


.contenedor span.url a img {
width: 26px; /* ancho mínimo de las imágenes */
height: 28px; /* alto mínimo de las imágenes */
border: 1px solid #FFF;
z-index: auto;
}


.contenedor span.url a:hover img {
z-index: 99;
}
</style>
<script type="text/javascript">
function Evento(elemento, nomevento, fnc) {

	if (elemento.addEventListener) {
		elemento.addEventListener(nomevento, function(e) { fnc.call(elemento, e); }, false);
    	} else if (elemento.attachEvent) {
		elemento.attachEvent('on' + nomevento, function() { fnc.call(elemento); });
  	}
}


function cssComputado(obj, styleProp) {
	if (obj.currentStyle) {
		var valor = obj.currentStyle[styleProp];
	} else if (window.getComputedStyle) {
		var valor = window.getComputedStyle(obj, null)[styleProp];
	}
	return valor;
}


window.onload = function() {

var thumb = document.querySelector('.contenedor').getElementsByTagName('img');

var min_w = parseInt(cssComputado(thumb[0], 'width'));
var min_h = parseInt(cssComputado(thumb[0], 'height'));
var max_w = 90; // editable - lo máximo que se podrán expandir las imágenes a lo ancho
var max_h = 97; // editable - lo máximo que se podrán expandir las imágenes a lo alto
var velocidad  = 50; // editable - establece velocidad de despliege y repliege. cuanto menor sea la cifra más velocidad

// hack
var navegador = navigator.userAgent;
if (navegador.indexOf('Chrome') != -1 || navegador.indexOf('Firefox') != -1) { 
velocidad -= 25;
} else if (navegador.indexOf('Opera') != -1) {
velocidad -= 15;
} else if (navegador.indexOf('Safari') != -1) {
velocidad -= 40;
}
// hack


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

			Evento(thumb[i], 'mouseover', function() {this.style.zIndex = 99; transAumenta(this, min_w, min_h)});
			Evento(thumb[i], 'mouseout', function() {clearTimeout(intervalo); this.style.border = "1px solid #FFF"; transDisminuye(this, parseInt(this.style.width), parseInt(this.style.height))});

	}



var intervalo;

function transAumenta(bloque, ancho, alto) {

	if (ancho < max_w) {

		ancho = Math.ceil(ancho + ((max_w - ancho) / velocidad));
		bloque.style.width = ancho + 'px';
		intervalo = setTimeout(function(){transAumenta(bloque, ancho, alto)}, 1);

	} else if (alto <= max_h) {

		alto = Math.ceil(alto + ((max_h - alto) / velocidad));
		bloque.style.height = alto + 'px';
		intervalo = setTimeout(function(){transAumenta(bloque, ancho, alto)}, 1);
	} 
}



function transDisminuye(bloque, ancho, alto) {

	if (alto > min_h) {

		alto -= Math.ceil((alto - min_h) / velocidad);
		bloque.style.height = alto + 'px';
		setTimeout(function(){transDisminuye(bloque, ancho, alto)}, 1);

	} else if (ancho > min_w) {

		ancho -= Math.ceil((ancho - min_w) / velocidad);
		bloque.style.width = ancho + 'px';
		setTimeout(function(){transDisminuye(bloque, ancho, alto)}, 1);

	} else {

		bloque.style.zIndex = 'auto';
	}
}


};
</script>
</head>
<body>

<div class="contenedor">
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim01t.jpg" title="i1" alt="i1"></a></span>
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim02t.jpg" title="i2" alt="i2"></a></span>
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim03t.jpg" title="i3" alt="i3"></a></span>
<span class="url"><a href="" target="_blank"><img src="http://r0k.us/graphics/kodak/thumbs/kodim05t.jpg" title="i4" alt="i4"></a></span>
</div>

<!-- ignorar -->
<script type="text/javascript">
//<![CDATA[
var browserList = { //Indicar compatibilidad si fué probada 1=compatible
'Firefox':1,
'IE8':1,
'IE9':1,
'Chrome':1,
'Opera':1,
'Safari(win)':1
},
// no modificar desde aquí
result = ''; for(var browser in browserList) {result += browserList[browser] === 1 ? browser + ' ' : '';};
//]]>
</script>
<script type="text/javascript" src="code/pie.js"></script>
<!-- ignorar -->

</body>
</html>
Subido bajo el nombre de "Miniaturas escalabales"
https://googledrive.com/host/0B5cDQ-...scalables.html

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #15 (permalink)  
Antiguo 18/01/2013, 15:53
Avatar de BloodShadow  
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: [APORTE] efectos sin jquery

hasta donde se, perdon si me equivoco, esto no esta disponible en version de ie7 y el abandonado y muy poco usado (pero aun usado) ie6:

div#contenedor_principal > span.izq

Perdon si me equivoco, hasta donde recuerdo no funciona muy bien en todos los browser entonces nunca lo he usado D=
  #16 (permalink)  
Antiguo 18/01/2013, 15:57
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por BloodShadow Ver Mensaje
hasta donde se, perdon si me equivoco, esto no esta disponible en version de ie7 y el abandonado y muy poco usado (pero aun usado) ie6:

div#contenedor_principal > span.izq

Perdon si me equivoco, hasta donde recuerdo no funciona muy bien en todos los browser entonces nunca lo he usado D=
La compatibilidad se aplica solo a
'Firefox':1,
'IE8':1,
'IE9':1,
'Chrome':1,
'Opera':1,
'Safari(win)':1
Tal cual se explica más arriba

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #17 (permalink)  
Antiguo 18/01/2013, 16:03
Avatar de BloodShadow  
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: [APORTE] efectos sin jquery

Gracias por la aclaracion amigo @emprear y gracias a @IsaBelM por el gran aporte que realizo. Pero a mi punto de vista, seguiria usando los pluggins encontrados por la web los cuales algunos (por no decir la mayoria) traen soporte para TODOS los browser. Aparte que hacen la vida mas simple y sencilla, ya que la mayoria son faciles de implementar y en mi caso, ya casi ni recuerdo javascript puro xD solo jquery.

Pero reitero los agradecimientos a @IsaBelM por el aporte estan muy bien aplicados ;)
  #18 (permalink)  
Antiguo 18/01/2013, 16:06
Avatar de BloodShadow  
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por IsaBelM Ver Mensaje
yo agregaría otro navegador. el olvidado safari
Recuerden que el safari de window trabaja diferente que el de mac D=

Malditos browsers xDDD que dolor de cabeza son haaha
  #19 (permalink)  
Antiguo 18/01/2013, 16:15
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por BloodShadow Ver Mensaje
Gracias por la aclaracion amigo @emprear y gracias a @IsaBelM por el gran aporte que realizo. Pero a mi punto de vista, seguiria usando los pluggins encontrados por la web los cuales algunos (por no decir la mayoria) traen soporte para TODOS los browser. Aparte que hacen la vida mas simple y sencilla, ya que la mayoria son faciles de implementar y en mi caso, ya casi ni recuerdo javascript puro xD solo jquery.

Pero reitero los agradecimientos a @IsaBelM por el aporte estan muy bien aplicados ;)
@BloodShadow
No estamos desmereciendo en nada el uso de jQuery, de hecho, yo lo uso y mucho, sino evitar los excesos como la de cargar toda una librería (y sus plugins) para conseguir a veces tan solo un efecto. Y remarcar el hecho, que muchísimossssss usuarios que postean, no terminan de entender, que jQuery (al igual, dicho sea de paso, que Ajax) es javascript. Si es por aprender, los efectos propuestos en estos aportes, son mucho más valiosos.
Es como esa gente que divide con una calculadora, pero les dás papel y lápiz y te terminan haciendo una linda receta de cocina.
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #20 (permalink)  
Antiguo 18/01/2013, 16:17
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por BloodShadow Ver Mensaje
Recuerden que el safari de window trabaja diferente que el de mac D=

Malditos browsers xDDD que dolor de cabeza son haaha
Por eso justamente lo de

'Firefox':1,
'IE8':1,
'IE9':1,
'Chrome':1,
'Opera':1,
'Safari(win)':1
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #21 (permalink)  
Antiguo 18/01/2013, 16:28
Avatar de BloodShadow  
Fecha de Ingreso: marzo-2010
Ubicación: El Salvador
Mensajes: 393
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por emprear Ver Mensaje
@BloodShadow
No estamos desmereciendo en nada el uso de jQuery, de hecho, yo lo uso y mucho, sino evitar los excesos como la de cargar toda una librería (y sus plugins) para conseguir a veces tan solo un efecto. Y remarcar el hecho, que muchísimossssss usuarios que postean, no terminan de entender, que jQuery (al igual, dicho sea de paso, que Ajax) es javascript. Si es por aprender, los efectos propuestos en estos aportes, son mucho más valiosos.
Es como esa gente que divide con una calculadora, pero les dás papel y lápiz y te terminan haciendo una linda receta de cocina.
Saludos
Estoy totalmente de acuerdo contigo, por eso reitere el agradecimiento a @IsaBelM no dudo que esto es mas compacto y mas liviano lo cual te hace ganar un par de bytes en la carga. Pero para gustos hay colores y como humilde opinion, prefiero ganar tiempo usando pluggin mucho mas administrables y ajustables que ahorrarme un par de bytes.

Solo es mi opinion no me comiencen a joder por decir lo que opino -.-'' no me quejo de nada solo opino.
  #22 (permalink)  
Antiguo 13/04/2013, 12:22
 
Fecha de Ingreso: abril-2013
Mensajes: 5
Antigüedad: 11 años
Puntos: 0
Respuesta: [APORTE] efectos sin jquery

Cita:
Iniciado por IsaBelM Ver Mensaje
cansada de ver como se mal usa este framework para crear pequeños efectos, me he decido a abrir este post en el que iré aportando efectos

slider de imágenes ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
border: none;
position: relative;
}

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


div#contenedor_principal {
width: 453px;
height: 250px;
margin: 0 auto;
}


div#contenedor_principal > div#contenedor_slider{
border: 1px solid #000;
width: 400px;
height: 250px;
background: #000;
margin: 0 auto;
overflow: hidden;
}


div#contenedor_principal > span.flecha{
z-index: 99;
width: 60px;
height: 61px;
top: 100px;
position: absolute;
cursor: pointer;
}


div#contenedor_principal > span.der{
right: -9px;
background-image: url('http://img197.imageshack.us/img197/6796/flechasy.png');
background-repeat: no-repeat;
background-position: -60px 0;
}


div#contenedor_principal > span.izq{
left: -9px;
background-image: url('http://img197.imageshack.us/img197/6796/flechasy.png');
background-repeat: no-repeat;
background-position: 0 0;
}


div#contenedor_principal > div#contenedor_slider div#slider{
width: 200%; /* este width es sobrescrito en el onload. es equivalente a 2 imágenes */
position: relative;
left: 0;
top: 0;
}


div#contenedor_principal > div#contenedor_slider div#slider img {
width: 400px; /* mismo width de #contenedor_slider */
height: 250px; /* mismo height de #contenedor_slider */
float: left;
}
</style>
<script type="text/javascript">
var namespaceSlider = {

Evento : function(elemento, nomevento, fnc) {

	if (elemento.addEventListener) {
		elemento.addEventListener(nomevento, function(e) { fnc.call(elemento, e); }, false);
    	} else if (elemento.attachEvent) {
		elemento.attachEvent('on' + nomevento, function() { fnc.call(elemento); });
  	}
},



estableceValoryEventos: window.onload = function() {
var selectorSlider = document.getElementById('slider');
var n_Imagenes = selectorSlider.getElementsByTagName('img').length;
selectorSlider.style.width = parseInt(n_Imagenes * 100, 10) + '%';

var spans = document.querySelectorAll('span.flecha');
namespaceSlider.Evento(spans[0], 'click', function() {namespaceSlider.mover(n_Imagenes, 0)});
namespaceSlider.Evento(spans[1], 'click', function() {namespaceSlider.mover(n_Imagenes, 1)});

},


clicks: 0,
posInicial: 0,
anchoImg: 100,

mover : function(nImg, i){

namespaceSlider.clicks += (i == 0) ? parseInt(nImg-1, 10) : parseInt(i, 10);
var indiceImg = namespaceSlider.clicks % nImg;
var posFinal = namespaceSlider.anchoImg * parseInt(indiceImg, 10);
var slider = document.getElementById('slider');

	if (namespaceSlider.posInicial >= posFinal) { // escrolea hacia la izquierda

		(function desplazar() { 
			setTimeout(function(){

				if(namespaceSlider.posInicial <= posFinal) return;
				namespaceSlider.posInicial -= 2;
				slider.style.left = -namespaceSlider.posInicial + '%';
				desplazar();
			},6);
		})();


	} else { // escrolea hacia la derecha


		(function desplazar() { 
			setTimeout(function(){

				if(namespaceSlider.posInicial >= posFinal) return;
				namespaceSlider.posInicial += 2;
				slider.style.left = -namespaceSlider.posInicial + '%';
				desplazar();
			},6);
		})();
	}
}
}
</script>
</head>
<body>

<div id="contenedor_principal">
<span class="flecha izq"></span>
<span class="flecha der"></span>
<div id="contenedor_slider">
<div id="slider">
<img src="http://facebookportadas.com/imagenes/comotellamas.jpg" alt="i0" />
<img src="http://facebookportadas.com/imagenes/inocente.jpg" alt="i1" />
<img src="http://facebookportadas.com/imagenes/minecraft2.jpg" alt="i2" />
<img src="http://facebookportadas.com/imagenes/diloquesientes.jpg" alt="i3" />
</div>
</div>
</div>

</body>
</html>



Hola buenas y si a este codigo le quiero meter tiempo para que las imagenes cambien soloas tambien, como lo hago?

Muchas gracias
  #23 (permalink)  
Antiguo 13/04/2013, 12:32
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

viste los otros ejemplo, ?
http://gdriv.es/emprear/IsabelM
alguno son automáticos

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #24 (permalink)  
Antiguo 14/04/2013, 10:15
 
Fecha de Ingreso: abril-2013
Mensajes: 5
Antigüedad: 11 años
Puntos: 0
Respuesta: [APORTE] efectos sin jquery

muchas gracias, lo mirare
  #25 (permalink)  
Antiguo 15/04/2013, 05:42
 
Fecha de Ingreso: abril-2013
Mensajes: 5
Antigüedad: 11 años
Puntos: 0
Respuesta: [APORTE] efectos sin jquery

he mirado todos, pero justo me haria un que seria una mezcla entre dos de esos por ejemplo un slider automatico, pero tambien con las flechas para poder moverse cuando le das, me podeis decir como hacerlo? o como quedaria el codigo?
Muchas gracias
  #26 (permalink)  
Antiguo 16/04/2013, 13:45
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

Infinite Scroll ------> compatibilidad: todos los navegadores modernos incluido ie8

infinitescroll.html
Código:
NO ESTÁS INCLUIDO EL DOCTYPE
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
* {
	margin: 0; 
	padding: 0;
	border: none;
	position: relative;
}



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


body {
	width: 100%;
	height: 100%;
	font-size: 100%;
}


div#contenedorInfiniteScroll {
	width: 70%;
	min-height: 100%;
	height: auto;
	margin: 0 auto;
	border: 1px solid rgb(61, 60, 60);
	background-color: rgb(233, 228, 228);
}


div#contenedorInfiniteScroll > div#contenedorImagenes {
	width: 100%;
	height: auto;
	overflow: hidden;
}


div#contenedorInfiniteScroll > div#contenedorImagenes > div {
	width: 30.333%;
	height: 13em; /* esta propiedad es necesaria para que el efecto funcione en ie8 */
	float: left;
	margin: 5% 1.5% 0 1.5%;
	text-align: center;
}


div#contenedorInfiniteScroll > div#contenedorImagenes > div > img {
	width: 100%;
}
</style>
<script src="./infinitescroll.js.php" type="text/javascript"></script>
</head>
<body>

<div id="contenedorInfiniteScroll">

	<div id="contenedorImagenes"></div>

</div>
</body>
</html>
infinitescroll.js.php
Código:
var lib = {

	Evento : function(elemento, nomevento, fnc) {

		if (elemento.addEventListener) {

			elemento.addEventListener(nomevento, fnc, false);

		} else if (elemento.attachEvent) {

			elemento.attachEvent('on' + nomevento, fnc);
		}
	},


	EventoEliminar : function(elemento, nomevento, fnc) {

		if (elemento.removeEventListener) {

			elemento.removeEventListener(nomevento, fnc, false);

		} else if (elemento.detachEvent) {

			elemento.detachEvent('on' + nomevento, fnc);
		}
	},


	cssComputado : function(obj, styleProp, psElem) {

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

	    if (window.getComputedStyle) {

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

	    } else if (obj.currentStyle) {

	        var valor = (/(em|%)/.test(obj.currentStyle[styleProp])) ? lib.cssComputadoIE8Pixel(obj, styleProp) : obj.currentStyle[styleProp];
	    }

	    return valor;
	},


	cssComputadoIE8Pixel : function(elem, prop) {

	    var value = elem.currentStyle[prop] || 0;
	    var Copy = elem.style.left;
	    var runtimeCopy = elem.runtimeStyle.left;

	    elem.runtimeStyle.left = elem.currentStyle.left;
	    elem.style.left = (prop === "fontSize") ? "1em" : value;
	    value = elem.style.pixelLeft + "px";

	    elem.style.left = Copy;
	    elem.runtimeStyle.left = runtimeCopy;

	    return value;
	},


	posicionScroll : function() {

		var scrollHorizontal = (window.pageXOffset !== undefined) ? window.pageXOffset : (document.documentElement || document.body.parentNode || document.body).scrollLeft;
		var scrollVertical = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;

		return {topScroll : scrollVertical, leftScroll : scrollHorizontal};
	}

};



var scrllInfinite = {

// ===============valores que se pueden editar=================

	peticionURL : 'InfiniteScroll_bd.php',
	<?php $registrosInicio = 16;?> // cantidad de registros a mostrar de inicio
	registrosAtraer : 16, // cantidad de registros que se mostrarán a cada limite de scroll
	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
	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

// ================================

	h_client : document.documentElement.clientHeight,
	nuevaPeticion : 0,



	inicia : function() {

		scrllInfinite.cargar();
		lib.Evento(window, 'scroll', scrllInfinite.posScroll);
		lib.Evento(window, 'unload', scrllInfinite.posScrollBack);
	},






	cargar : function() {

		if (sessionStorage.getItem('inicio') == null) {

	<?php
	$mysqli = @new mysqli("localhost", "root", "", "pinturas");


	if ($mysqli->connect_errno) {
	 
	    die();
	}


	$cadena = "SELECT campo FROM tabla ORDER BY campo ASC LIMIT $registrosInicio";
        $cadena2 = "SELECT COUNT(id) AS cantidad FROM tabla";

	$cantidad_registros = $mysqli->query($cadena2);
	$filas = $cantidad_registros->fetch_array(MYSQLI_ASSOC);
	$total_registros = intval($filas['cantidad']);

	$resultado = $mysqli->query($cadena);
	$i = 0;
	while ($row = $resultado->fetch_array(MYSQLI_ASSOC)) {

		$n_data["imgThumb"][$i] = '<div><img src="'.$row["imgThumb"].'" alt="" /></div>';
		$i++;
	}

	$resultado->free();
	$mysqli->close();
	?>

			imgInicio = <?php echo json_encode($n_data); ?>;

			for (i in imgInicio['imgThumb']) {

				document.getElementById('contenedorImagenes').innerHTML += imgInicio['imgThumb'][i];
			}

			sessionStorage.setItem('totalRegistros', parseInt(<?php echo $total_registros; ?>, 10));

			sessionStorage.setItem('inicio', parseInt(imgInicio['imgThumb'].length, 10));

			scrllInfinite.nuevaPeticion = scrllInfinite.h_client + (parseInt(lib.cssComputado(document.getElementById('contenedorImagenes').childNodes[0], 'height'), 10) * 2);

		} else {

			var listartodos = parseInt(sessionStorage.getItem('inicio'), 10);
			sessionStorage.setItem('inicio', 0);

			scrllInfinite.peticionRegistros(listartodos);
			lib.EventoEliminar(window, 'scroll', scrllInfinite.posScroll);
					
		}

	},





	posScroll : function() {

		var pos = lib.posicionScroll();
		var posicionY = pos.topScroll;

		scrllInfinite.iniciaPeticionRegistros(posicionY);
	},






	posScrollBack : function() {

		var pos = lib.posicionScroll();
		var posicionY = pos.topScroll;

		if (posicionY != 0) {
			sessionStorage.setItem('posicionScroll', posicionY);
		}
	},






	iniciaPeticionRegistros : function(posicionTop) {

		var h_scroll = document.documentElement.scrollHeight;

		if (scrllInfinite.nuevaPeticion >= parseInt(h_scroll - posicionTop, 10)) {

			if (sessionStorage.getItem('posicionScroll') == null) {

				lib.EventoEliminar(window, 'scroll', scrllInfinite.posScroll);
				scrllInfinite.peticionRegistros(scrllInfinite.registrosAtraer);

			} 

		}
	},






	peticionRegistros : function(r) {

		if (parseInt(sessionStorage.getItem('inicio'), 10) >= parseInt(sessionStorage.getItem('totalRegistros'), 10)) {

			sessionStorage.setItem('posicionScroll', sessionStorage.getItem('posicionScroll'));
			return;
		}

		var peticion = 'inicia=' + parseInt(sessionStorage.getItem('inicio'), 10) + '&cuantos=' + parseInt(r, 10);

		var ajax = new XMLHttpRequest();

		ajax.open('POST', scrllInfinite.peticionURL, true);
		ajax.onreadystatechange = function() {

			if (ajax.readyState == 4) {

				if(ajax.status == 200) {

					var datos = ajax.responseText.replace(/<(?=!-|script)[^>]+>/g,'');

					document.getElementById('contenedorImagenes').innerHTML += datos;

					if (parseInt(sessionStorage.getItem('inicio'), 10) == 0 && parseInt(sessionStorage.getItem('posicionScroll'), 10) >= 1) {

						scrllInfinite.scroleaPagina();
					}


					sessionStorage.setItem('inicio', parseInt(sessionStorage.getItem('inicio'), 10) + parseInt(r, 10));
					lib.Evento(window, 'scroll', scrllInfinite.posScroll);
					ajax.abort();
					ajax=null;
				}
			}
		}
		ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded", true);	
		ajax.send(peticion);
	    return;
	},






	scroleaPagina : function() {

		var empieza = new Date().getTime();
		var actT = 0;
		var offsetTop = parseInt(sessionStorage.getItem('posicionScroll'), 10);
		sessionStorage.removeItem('posicionScroll');
		var controlaVelocidad =  parseInt(offsetTop * scrllInfinite.velocidadScroll, 10);
		var intervalo = false;
		var scrll = 0;
		var scrll2 = 0;


		(function scrolea() {

			setTimeout(function() {

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

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

					var avance = ((ahora - empieza) / controlaVelocidad);
					scrll = 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) < (scrllInfinite.empiezaDeceleracion * 3)) {

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

							} else {

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

							}

						}, 1)

					})();

				}


			}, 1);

		})();

	}

};

lib.Evento(window, 'load', scrllInfinite.inicia); // para ie8
infinitescroll.php
Código:
<?php
header("Content-Type: text/html; charset=UTF-8");
$mysqli = @new mysqli("localhost", "root", "", "bd");


if ($mysqli->connect_errno) {
 
    die();
}


$inicio = $_POST["inicia"];
$cuanto = $_POST["cuantos"];


$cadena = "SELECT campo FROM tabla ORDER BY campo ASC LIMIT $inicio, $cuanto";

$resultado = $mysqli->query($cadena);

while ($row = $resultado->fetch_array(MYSQLI_ASSOC)) {

$img = $row["campo"];

echo <<< RESPUESTA
<div><img src="$img" alt="" /></div>\n
RESPUESTA;

}

$resultado->free();
$mysqli->close();
?>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 22/10/2014 a las 07:37
  #27 (permalink)  
Antiguo 16/04/2013, 18:28
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

Parece muy atractiva @IsaBelM, tenés el sql para la tabla, asi la implemento. Si no crearé una
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #28 (permalink)  
Antiguo 17/04/2013, 04:52
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

es muy básica, pero suficiente como ejemplo
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `infiniteimagenes` (
  2.   `Id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `srcImagen` text NOT NULL,
  4.   `hrefImagen` text NOT NULL,
  5.   `altImagen` text NOT NULL,
  6.   PRIMARY KEY (`Id`)
  7. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;
  8.  
  9. --
  10. -- Volcar la base de datos para la tabla `infiniteimagenes`
  11. --
  12.  
  13. INSERT INTO `infiniteimagenes` (`Id`, `srcImagen`, `hrefImagen`, `altImagen`) VALUES
  14. (1, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img1'),
  15. (2, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img2'),
  16. (3, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img3'),
  17. (4, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img4'),
  18. (5, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img5'),
  19. (6, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img6'),
  20. (7, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img7'),
  21. (8, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img8'),
  22. (9, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img9'),
  23. (10, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img10'),
  24. (11, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img11'),
  25. (12, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img12'),
  26. (13, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img13'),
  27. (14, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img14'),
  28. (15, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img15'),
  29. (16, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img16'),
  30. (17, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img17'),
  31. (18, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img18'),
  32. (19, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img19'),
  33. (20, 'http://www.blogdehumor.com/wp-content/2013/04/que-hay-en-internet.jpg', 'http://www.blogdehumor.com/que-hay-en-internet/', 'img20');
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 01/06/2014 a las 13:36
  #29 (permalink)  
Antiguo 17/04/2013, 05:38
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: [APORTE] efectos sin jquery

ok. veremos que queda y publico demo.
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #30 (permalink)  
Antiguo 05/08/2013, 14:27
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] efectos sin jquery

Scroll Suave (Smooth Scrolling) ----> compatibilidad : todos los navegadores modernos incluido ie8

Código:
<!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 Suave</title>
<style type="text/css">
* {
	margin: 0;
	padding: 0;
	border: none;
	position: relative;
}



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



a {
outline: 0;
}



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 {
	height: 1.55em;
	width: 8.92em;
	margin-top: 1.6em;
}



div#header div#menu > ul li > a {
	top: 18%;
	color: rgb(224, 220, 220);
	font: 0.9em Tahoma;
	text-decoration: none;
}


div#secciones > div {
	width: 100%;
	height: 700px;
	color: white;
}


.rojo {
	background-color: red;
}


.verde {
	background-color: green;
}


.azul {
	background-color: blue;
}
</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);
},



obtenerEvento : function(event) {

	return (event) ? event : window.event;
}

}




function ini() {

var menu = document.querySelector('#lista').getElementsByTagName('li');

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

		lib.Evento(menu[i], 'click', function(event) {scrollAncla(this.firstChild.getAttribute('href').split('#')[1], event);});
	}
}





function scrollAncla(elem, e) {

	var evt = lib.obtenerEvento(e);

	if (evt.preventDefault) {
	
		evt.preventDefault();
		evt.stopPropagation();

	} else {

		evt.returnValue = false;
		evt.cancelBubble = true;
	}


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


	while(grupo.offsetParent) {

		offsetTop += grupo.offsetTop;
		grupo = grupo.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);
	})();

}


window.onload = function() { ini(); };
</script>
</head>
<body>

<div id="header">
		<div id="base-menu"></div>
		<div id="menu">
			<ul id="lista">
				<li><a href="#seccion1">sección 1</a></li>
				<li><a href="#seccion2">sección 2</a></li>
				<li><a href="#seccion3">sección 3</a></li>
			</ul>
		</div>
	</div>


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




<!-- ignorar -->
<script type="text/javascript">
//<![CDATA[
var browserList = { //Indicar compatibilidad si fué probada 1=compatible
'Firefox':1,
'IE8':1,
'IE9':1,
'Chrome':1,
'Opera':1,
'Safari(win)':1
},
// no modificar desde aquí
result = ''; for(var browser in browserList) {result += browserList[browser] === 1 ? browser + ' ' : '';};
//]]>
</script>
<script type="text/javascript" src="code/pie.js"></script>
<!-- ignorar -->

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

Última edición por IsaBelM; 05/08/2013 a las 17:05

Etiquetas: efectos, funcion, html, javascript
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

SíEste tema le ha gustado a 11 personas




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