11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Voila j'aimerais pouvoir réaliser un slide d'une div.
Je m'explique... J'ai une première div affichée à l'écran et une deuxième qui n'est pas visible. Quand je clique sur afficher, la div apparait par dessus la précédente en provenance du côté droit de l'écran ou carrément si c'est possible poussé la div jaune sur le côté gauche pour prendre sa place.

Voici un schéma explicatif de la version "simple":
http://revlam.free.fr/etat_0.jpg
http://revlam.free.fr/etat_1.jpg

Avez vous une idée pour réaliser cette fonction ? Je ne m'interesse pas à la fluidité de l'animation dans l'immédiat. Mais je veux que ce soit en plein écran. Tout ce que j'ai trouvé sur le net se fait uniquement avec des images.

Merci d'avance
Modifié par revlam (03 Jul 2011 - 22:51)
Bonsoir à toutes et à tous,

les boites glissantes ! Voici le code HTML :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>page glissante</title>
<script language="javascript" type="text/javascript" src="JS/Script.js"></script>

<link rel="stylesheet" type="text/css" href="CSS/Styles.css" />

<!--[if IE]>
<link rel="stylesheet" type="text/css" href="CSS/Styles-IE.css" /
<![endif]-->

</head>

<body>
	<!-------------------->
	<!-- Boite Numéro 1 -->
	<!-------------------->

	<div id="boite1" class="commun">
		<div class="cont">
			<h1>Boite 1</h1>
			<p>bla bla bla bla bla</p>
			<p>bla bla bla bla bla</p>
			<p>bla bla bla bla bla</p>
			<p>bla bla bla bla bla</p>
			<p>bla bla bla bla bla</p>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 2 -->
	<!-------------------->

	<div id="boite2" class="commun">
		<div class="cont">
			<h1>Boite 2</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 3 -->
	<!-------------------->

	<div id="boite3" class="commun">
		<div class="cont">
			<h1>Boite 3</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 4 -->
	<!-------------------->

	<div id="boite4" class="commun">
		<div class="cont">
			<h1>Boite 4</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 5 -->
	<!-------------------->

	<div id="boite5" class="commun">
		<div class="cont">
			<h1>Boite 5</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 6 -->
	<!-------------------->

	<div id="boite6" class="commun">
		<div class="cont">
			<h1>Boite 6</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 7 -->
	<!-------------------->

	<div id="boite7" class="commun">
		<div class="cont">
			<h1>Boite 7</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 8 -->
	<!-------------------->

	<div id="boite8" class="commun">
		<div class="cont">
			<h1>Boite 8</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!-------------------->
	<!-- Boite Numéro 9 -->
	<!-------------------->

	<div id="boite9" class="commun">
		<div class="cont">
			<h1>Boite 9</h1>
			<p>bla bla bla bla bla</p>
		</div>
	</div>

	<!------------------>
	<!-- Menu Général -->
	<!------------------>

	<ul id="menu">
		<li onclick="boite.deplace(1);">Boite 1</li>
		<li onclick="boite.deplace(2);">Boite 2</li>
		<li onclick="boite.deplace(3);">Boite 3</li>
		<li onclick="boite.deplace(4);">Boite 4</li>
		<li onclick="boite.deplace(5);">Boite 5</li>
		<li onclick="boite.deplace(6);">Boite 6</li>
		<li onclick="boite.deplace(7);">Boite 7</li>
		<li onclick="boite.deplace(8);">Boite 8</li>
		<li onclick="boite.deplace(9);">Boite 9</li>
	</ul>
</body>
</html>


Voici le CSS :
* {
			margin					: 0;
			border					: none;
			padding					: 0;
}

html		{	overflow				: hidden;		}
body		{	background-color		: grey;			}

/*--------------------*/
/*     Les Boites     */
/*--------------------*/

#boite1 {	background-color		: red;			}
#boite2 {	background-color		: green;		}
#boite3 {	background-color		: lightblue;	}
#boite4 {	background-color		: yellow;		}
#boite5 {	background-color		: pink;			}
#boite6 {	background-color		: lightyellow;	}
#boite7 {	background-color		: skyblue;		}
#boite8 {	background-color		: maroon;
			color					: white;		}
#boite9 {	background-color		: white;		}

.commun {
			display					: block;
			float					: left;
			position				: relative;
			z-index					: 1;
}

/*------------------------------------------------*/
/*     Exemple de présentation dans une Boite     */
/*------------------------------------------------*/

.cont {
			position				: absolute;
			top						: 25px;
			left					: 125px;
			right					: 25px;
			bottom					: 25px;
			background-color		: magenta;
}

.cont h1 {
			text-align				: center;
}

.cont p {
			margin					: 10px;
			border					: 3px solid black;
			padding					: 10px;
}

/*-------------------*/
/*     Menu fixe     */
/*-------------------*/

#menu {
			background-color		: transparent;
			position				: fixed;
			top						: 200px;
			left					: 0px;
			font-size				: 2em;
			z-index					: 2;
}

li {
			background-color		: blue;
			list-style-type			: none;
			margin					: 5px;
}


Voici le code CSS pour IE :
menu {		position				: absolute;		}

Et enfin le code javascript :
/*======================================*/
/*     Initialisation au Chargement     */
/*======================================*/

window.onload = function ()
{
	boite.init();
}

window.onresize = function ()
{
	boite.init();
}

/********************************************/
/*                                          */
/*     Gestion de sous-pages Glissantes     */
/*                                          */
/********************************************/

var boite = {
/*==================================*/
/*     paramètre de l'animation     */
/*==================================*/

delay: null,
byStep: 100,
speed: 20,
mode: false,				/* true : avec animation, false : sans animation */

/*=============================*/
/*     Position des Boites     */
/*=============================*/

precX: 0,
precY: 0,
suivX: 0,
suivY: 0,

/*========================*/
/*     Initialisation     */
/*========================*/

init: function ()
{
	/*----------------------------------------*/
	/*     Largeur et Hauteur de la Boite     */
	/*----------------------------------------*/

	if (typeof(window.innerHeight) == "number")
	{
		var ww = parseInt(window.innerWidth);
		var hh = parseInt(window.innerHeight);
	}
	else
	{
		var ww = parseInt(window.screen.availWidth);
		var hh = parseInt(window.screen.availHeight) - parseInt(window.screenTop);
	}

	/*-------------------------------------------------------------*/
	/*     on force la largeur et la hauteur du bloc conteneur     */
	/*-------------------------------------------------------------*/

	var aa = ww * 3;		// Trois boites par ligne
	var bb = hh * 3;		// Trois boites par colonne

	window.document.body.style.width	= "" + aa + "px";
	window.document.body.style.height	= "" + bb + "px";

	/*-----------------------------------------------------------*/
	/*     on force la largeur et la hauteur de chaque boite     */
	/*-----------------------------------------------------------*/

	var xx = document.getElementsByTagName("div");

	for (var i=0; i<xx.length; i++)
	{
		if (xx.item(i).className == "commun")
		{
			xx.item(i).style.width  = "" + ww + "px";
			xx.item(i).style.height = "" + hh + "px";
		}
	}

	/*------------------------------------------*/
	/*     on se positionne sur la "boite3"     */
	/*------------------------------------------*/

	this.precX = document.getElementById("boite3").offsetLeft;
	this.precY = document.getElementById("boite3").offsetTop;

	window.scrollTo(this.precX, this.precY);
},

/*==================================*/
/*     Animation du Déplacement     */
/*==================================*/

anime: function ()
{
	/*-----------------------------*/
	/*     Mode Sans Animation     */
	/*-----------------------------*/

	if (this.mode)
	{
		window.scrollTo(this.suivX, this.suivY);
		return;
	}

	/*----------------------------*/
	/*     Mode AvecAnimation     */
	/*----------------------------*/

	var flagX = false;
	var flagY = false;

	/*-------------------------------*/
	/*     Ajustement Horizontal     */
	/*-------------------------------*/

	var stepX = this.suivX - this.precX;

	if (stepX > +this.byStep)
	{
		this.precX +=  this.byStep;
			 stepX  = +this.byStep;
	}
	else
	{
		if (stepX < -this.byStep)
		{
			this.precX -=  this.byStep;
				 stepX  = -this.byStep;
		}
		else
		{
			this.precX  = this.suivX;
			flagX       = true;
		}
	}
	
	/*-----------------------------*/
	/*     Ajustement Vertical     */
	/*-----------------------------*/

	var stepY = this.suivY - this.precY;

	if (stepY > +this.byStep)
	{
		this.precY +=  this.byStep;
			 stepY  = +this.byStep;
	}
	else
	{
		if (stepY < -this.byStep)
		{
			this.precY -=  this.byStep;
				 stepY  = -this.byStep;
		}
		else
		{
			this.precY = this.suivY;
			flagY      = true;
		}
	}
	
	window.scrollBy(stepX, stepY);

	/*------------------------------------*/
	/*     Poursuite de l'Animation ?     */
	/*------------------------------------*/

	if ((flagX == true) && (flagY == true))
	{
		clearInterval(this.delay);
		this.delay = null;

		this.precX = this.suivX;
		this.precY = this.suivY;
	}
	else
	{
		this.delay = setTimeout("boite.anime();", this.speed);
	}
},

/*================================================*/
/*     Déplacement vers une nouvelle position     */
/*================================================*/

deplace: function (node)
{
	var xx = document.getElementById("boite" + node.toString());

	this.suivX = xx.offsetLeft;
	this.suivY = xx.offsetTop;

	this.anime();
}

};


@+
L'idée est excelente mais le gros hic c'est que l'utilisateur peut scroller vers le bas (dans ton exemple) alors que je veux vraiment que ce soit caché au départ un peut à la manière des applications iOS.

En tout cas un grand merci c'est déjà un bon point de départ.

EDIT : ah non autant pour moi ca marche sur firefox mais pas sur opera... enfin ce n'est pas grave !!! Merci beaucoup !!!
Modifié par revlam (03 Jul 2011 - 23:02)
Bonsoir à toutes et à tous,

désolé de te le dire mais cela fonctionne correctement sur tous les navigateurs !

Firefox 5.0 --- MSIE 8.0 --- Google Chrome 12.0 --- opera 11.50 --- safari 5.0.5

Explique moi comment tu peux "SCROLLER" vers le bas puisque cette fonction n'existe pas ! Et de plus, chaque page n'est visible que par le menu. Le principe est justement de cacher les autres pages à l'utilisateur.

Il y a une animation que tu peux paramétrer. Mais si tu ne désires pas l'effet, tu peux la supprimer. Dans le "Script.js", il y a une variable qui se nomme MODE. Si tu ne veux pas d'animation alors tu mets MODE : TRUE, si tu veux une animation, tu mets MODE : FALSE,

Et en plus j'ai essayé de répondre au mieux à la question posée. Donc tu étudies cet exemple, et adapte le code à tes besoins !

@+
Modifié par Artemus24 (04 Jul 2011 - 03:45)
Artemus24 a écrit :
Bonsoir à toutes et à tous,

désolé de te le dire mais cela fonctionne correctement sur tous les navigateurs !

Firefox 5.0 --- MSIE 8.0 --- Google Chrome 12.0 --- opera 11.50 --- safari 5.0.5

Explique moi comment tu peux &quot;SCROLLER&quot; vers le bas puisque cette fonction n'existe pas ! Et de plus, chaque page n'est visible que par le menu. Le principe est justement de cacher les autres pages à l'utilisateur.

Il y a une animation que tu peux paramétrer. Mais si tu ne désires pas l'effet, tu peux la supprimer. Dans le &quot;Script.js&quot;, il y a une variable qui se nomme MODE. Si tu ne veux pas d'animation alors tu mets MODE : TRUE, si tu veux une animation, tu mets MODE : FALSE,

Et en plus j'ai essayé de répondre au mieux à la question posée. Donc tu étudies cet exemple, et adapte le code à tes besoins !

@+


Mea culpa j'avais une ancienne version d'opera suite à la restauration de mon mac.
Encore merci !!