Perso Web PMI Prog Réseaux sociaux Développement Etudes OS Sécurité Infographie Mobiles Référencement iPhone Apple Scrum

Mot-clé - Frameworks

Fil des billets - Fil des commentaires

31 déc. 2008

Noobslide, un slideshow pour vos photos

Par Jean-Christophe Duvivier à 12:37

Mots Clés Application, Frameworks, Masques, Mootools, Slideshow,

Icone MootoolsAprès quelques jours de silence, j'ai envie de vous faire découvrir noobslide, un Slideshow basé sur le Frameworks Mootools. "Découvrir" sous-entend "mini tuto", je vais me contenter d'une brève présentation qui je l'espère vous poussera à l'utiliser ;)

Sans plus attendre je vous invite sur le site efectorelativo.net qui propose 8 exemples d'utilisation de noobslide. Les effets sont variés et beaux visuellement.

1. Mise en place des scripts :

La mise en place du Slideshow est vraiment très simple.

Tout d'abord il faut inclure le script Mootools, et le script noobslide :

<script type="text/javascript" src="site/js/mootools.js"></script>
<script type="text/javascript" src="site/js/noobslide.js"></script>

Ensuite, insérez le script spécifique à votre modèle de noobslide dans le head. Il sera exécuté au chargement de votre page. Pour le modèle 1, cela donne ça :

window.addEvent('domready',function(){
 
var nS1 = new noobSlide({
box: $('box1'),
items: [0,1,2,3],
size: 480,
autoPlay: true
});
 
});

Vous pouvez récupérer le code correspondant à votre modèle directement dans le code source du site efectorelativo.net.

2. Mise en place des styles:

Au niveau des styles, il faut intégrer la feuille de style suivante (n'oubliez pas de supprimer les styles des modèles qui ne vous servent pas)

/* Sample 1*/
#box1{
	position:absolute;
}
#box1 span{
	display:block;
	float:left;
}
 
/* Sample 2*/
#box2{
	position:absolute;
}
#box2 span{
	display:block;
	float:left;
}
 
/* Sample 3*/
#box3{
	position:absolute;
}
#box3 span{
	display:block;
	float:left;
}
 
/* Sample 4*/
#box4{
	position:absolute;
}
#box4 div{
	width:480px;
	height:240px;
	float:left;
	background:#eee;
}
 
#box4 h3, #box4 p, #box4 ul{
	padding:5px 10px;
}
#box4 p{
	text-indent:16px;
}
#box4 img{
	width:200px;
	width:150px;
	float:left;
	margin:0 10px 10px 15px;
}
#info4{
	background:#fff !important;
	color:red !important;
	cursor:default
}
 
/* Sample 5*/
#box5{
	position:absolute;
	width:240px;
}
#box5 span{
	display:block;
}
#info5{
	bottom:0;
}
 
/* Sample 6*/
#box6{
	position:absolute;
	width:240px;
}
#box6 span{
	display:block;
}
#handles6_1{
	float:left
}
#handles6_2{
	float:right
}
.mask6{
	position:absolute;
	left:50%;
	margin-left:-120px;
	width:240px;
	height:180px;
	overflow:hidden;
}
.sample6 .buttons{
	clear:both;
	text-align:center;
}
 
/* Sample 7*/
#box7{
	position:absolute;
}
#box7 span{
	display:block;
	float:left;
}
 
#thumbs7{
	position:relative;
	width:486px;
	clear:both;
	height:41px;
	overflow:hidden;
	margin-top:200px;
}
#thumbs7 .thumbs, #thumbs_handles7, #thumbs_mask7{
	position:absolute;
	top:0;
	width:100%;
	height:41px;
}
#thumbs7 .thumbs div, #thumbs_handles7 span{
	display:block;
	width:60px;
	height:41px;
	margin:0;
	float:left;
	cursor:pointer;
}
#thumbs7 .thumbs div img{
	width:54px;
	float:right;
}
#thumbs_handles7 span{
	background:url(thumb_invisible.gif) no-repeat;
}
#thumbs_mask7{
	width:1200px;
	background:url(thumbs_mask.gif) no-repeat center top;
}
 
/* Sample 8*/
#box8{
	position:absolute;
}
#box8 div{
	width:480px;
	float:left;
}
#box8 .buttons{
	text-align:left
}
#box8 .next{
	float:right
}
.sample8 .buttons{
	text-align:center;
	clear:both;
}
.sample8 .mask1{
	border-top:1px solid #ccc;
	border-bottom:1px solid #ccc;
}
 
/* ********************************** */
 
.thumbs{
	width:54px;
}
.thumbs div{
	display:block;
	width:54px;
	height:41px;
	margin:3px 0;
	cursor:pointer;
}
 
.thumbs div img{
	display:block;
	width:100%;
	height:100%;
	border:none
}
 
.info{
	width:240px;
	height:50px;
	background:#000;
	position:absolute;
}
.info p, .info h4{
	color:#fff;
	padding:3px 8px;
	font-family:Arial;
}
.info h4{
	font-size:14px;
}
.info h4 a{
	float:right;
	background:#fff;
	color:#000;
	font-size:10px;
	padding:0 3px;
	text-decoration:none
}
 
.mask1{
	position:relative;
	width:480px;
	height:180px;
	overflow:hidden;
}
.mask2{
	position:relative;
	width:240px;
	height:180px;
	overflow:hidden;
}
.mask3{
	position:relative;
	width:480px;
	height:240px;
	overflow:hidden;
}
 
span img{
	display:block;
	border:none;
}

3. Mise en place du squelette :

Encore une fois, il va vous falloir fouiner dans le code source du site efectorelativo.net. Pour le modèle 1, on aurait ce squelette :

<h2>Sample 1</h2>
<div class="sample">
	<div class="mask1">
		<div id="box1">
			<span><img src="img1.jpg" alt="Photo" /></span>
			<span><img src="img2.jpg" alt="Photo" /></span>
			<span><img src="img3.jpg" alt="Photo" /></span>
 
			<span><img src="img4.jpg" alt="Photo" /></span>
			<span><img src="img5.jpg" alt="Photo" /></span>
			<span><img src="img6.jpg" alt="Photo" /></span>
			<span><img src="img7.jpg" alt="Photo" /></span>
			<span><img src="img8.jpg" alt="Photo" /></span>
		</div>
	</div>
</div>

Et voilà, votre Slideshow est en principe opérationnel ;) Il ne vous reste plus qu'à l'adapter à votre application, chose qui se révèle être beaucoup plus complexe que la mise en place. Il vous faudra gérer les positions des masques et des images ;)

27 nov. 2008

Utilisation du Frameworks JavaScript Mootools : L'Accordéon

Par Jean-Christophe Duvivier à 19:28

Mots Clés Frameworks, JavaScript, Mootools,

Icone Mootools

J'ai rédigé ce tuto afin de faire découvrir le Frameworks JavaScript Mootools aux non connaisseurs. Il permet de présenter les bases de l'utilisation de cet outil, ce qui va vous permettre par la suite d'intégrer des éléments dynamiques dans vos applications.

Pour ce tuto, nous allons mettre en place un système d'accordéon tel que vous pouvez le voir ici : Mootools Accordion.

Vous allez commencer par récupérer tous les éléments nécessaires pour bosser ici : Mootools Accordion Pack.

Je vous laisse dézipper le tout sur votre PC et tester l'index. Alors ? Ça marche ? Effectivement, le pack est opérationnel.

Pour fonctionner, votre application a besoin de 4 fichiers :

  • mootools.js
  • demo.js
  • demo.css
  • index.html

Détaillons-les un peu :

Le fichier mootools.js

C'est LE fichier de base de Mootools. Il y recense toutes les variables et fonctions nécessaires au bon fonctionnement de vos applications. Dans le cas de l'accordéon, c'est ce bout de code qui est concerné :

var Accordion = new Class({
 
	Extends: Fx.Elements,
 
	options: {/*
		onActive: $empty,
		onBackground: $empty,*/
		display: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		fixedHeight: false,
		fixedWidth: false,
		wait: false,
		alwaysHide: false
	},
 
	initialize: function(){
		var params = Array.link(arguments, {'container': Element.type, 'options': Object.type, 'togglers': $defined, 'elements': $defined});
		this.parent(params.elements, params.options);
		this.togglers = $$(params.togglers);
		this.container = $(params.container);
		this.previous = -1;
		if (this.options.alwaysHide) this.options.wait = true;
		if ($chk(this.options.show)){
			this.options.display = false;
			this.previous = this.options.show;
		}
		if (this.options.start){
			this.options.display = false;
			this.options.show = false;
		}
		this.effects = {};
		if (this.options.opacity) this.effects.opacity = 'fullOpacity';
		if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
		if (this.options.height) this.effects.height = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
		for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i]);
		this.elements.each(function(el, i){
			if (this.options.show === i){
				this.fireEvent('active', [this.togglers[i], el]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		if ($chk(this.options.display)) this.display(this.options.display);
	},
 
	addSection: function(toggler, element, pos){
		toggler = $(toggler);
		element = $(element);
		var test = this.togglers.contains(toggler);
		var len = this.togglers.length;
		this.togglers.include(toggler);
		this.elements.include(element);
		if (len && (!test || pos)){
			pos = $pick(pos, len - 1);
			toggler.inject(this.togglers[pos], 'before');
			element.inject(toggler, 'after');
		} else if (this.container && !test){
			toggler.inject(this.container);
			element.inject(this.container);
		}
		var idx = this.togglers.indexOf(toggler);
		toggler.addEvent('click', this.display.bind(this, idx));
		if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
		if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
		element.fullOpacity = 1;
		if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth;
		if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight;
		element.setStyle('overflow', 'hidden');
		if (!test){
			for (var fx in this.effects) element.setStyle(fx, 0);
		}
		return this;
	},
 
	display: function(index){
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		this.previous = index;
		var obj = {};
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
			this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		return this.start(obj);
	}
 
});

Je vous conseille de ne pas trop toucher à ce fichier, sauf si vous vous y connaissez ;)

Ensuite vient le fichier demo.js

window.addEvent('domready', function() {
 
	//create our Accordion instance
	var myAccordion = new Accordion($('accordion'), 'h3.toggler', 'div.element', {
		opacity: false,
		onActive: function(toggler, element){
			toggler.setStyle('color', '#41464D');
		},
		onBackground: function(toggler, element){
			toggler.setStyle('color', '#528CE0');
		}
	});
 
	//add click event to the "add section" link
	$('add_section').addEvent('click', function(event) {
		event.stop();
 
		// create toggler
		var toggler = new Element('h3', {
			'class': 'toggler',
			'html': 'Common descent'
		});
 
		// create content
		var content = new Element('div', {
			'class': 'element',
			'html': '<p>A group of organisms [...] </p>'
		});
 
		// position for the new section
		var position = 0;
 
		// add the section to our myAccordion using the addSection method
		myAccordion.addSection(toggler, content, position);
	});
});

Un code un peu plus digeste que le précédent. Détaillons-le :

windows.addEvent('domready', function())

Cette méthode permet d'exécuter la fonction dès que l’arbre dom est chargé. Elle est nécessaire dans tous vos scripts liés au Frameworks Mootools.

var myAccordion = new Accordion($('accordion'), 'h3.toggler', 'div.element', {
		opacity: false,
		onActive: function(toggler, element){
			toggler.setStyle('color', '#41464D');
		},
		onBackground: function(toggler, element){
			toggler.setStyle('color', '#528CE0');
		}
	});

Ici on déclare une nouvelle instance de la classe Accordion en spécifiant les éléments html qui vont interagir avec le JavaScript. En l'occurence, les éléments h3 de classe toggler et les éléments div de classe element. On définit ensuite la couleur du texte des éléments dans les deux états : activé et non activé.

//add click event to the "add section" link
	$('add_section').addEvent('click', function(event) {
		event.stop();
 
		// create toggler
		var toggler = new Element('h3', {
			'class': 'toggler',
			'html': 'Common descent'
		});
 
		// create content
		var content = new Element('div', {
			'class': 'element',
			'html': '<p>A group of organisms [...] </p>'
		});
 
		// position for the new section
		var position = 0;
 
		// add the section to our myAccordion using the addSection method
		myAccordion.addSection(toggler, content, position);
	});

Ce code permet d'ajouter une nouvelle section suite à un clic sur un élément d'id add_section. Cet ajout de section se caractérise par l'ajout d'un élément h3.toggler et d'un élément div.element. Ce bout de code n'a pas vraiment d'importance dans l'utilisation d'un accordéon classique.

Ensuite vient le fichier demo.css

#accordion {
	margin:20px 0px;
}
 
h3.toggler {
	cursor: pointer;
	border: 1px solid #f5f5f5;
	border-right-color: #ddd;
	border-bottom-color: #ddd;
	font-family: 'Andale Mono', sans-serif;
	font-size: 12px;
	background: #D2E0E6;
	color: #528CE0;
	margin: 0 0 4px 0;
	padding: 3px 5px 1px;
}
 
div.element p, div.element h4 {
	margin:0px;
	padding:4px;
}
 
blockquote {
	padding:5px 20px;
}

Rien de bien particulier. C'est ici que se paramètre le style de votre application.

Enfin, le fichier index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" href="demo.css" type="text/css" />
	<script type="text/javascript" src="../mootools.js"></script>
	<script type="text/javascript" src="demo.js"></script>
	<title>Accordion Demo</title>
</head>
<body>
	<h1>Accordion</h1>
	<h2>Introduction</h2>
	<p>
		The Accordion gives you a fancy way to only show the really needed content.
	</p>
	<hr />
	<div>
		<a id="add_section" href="#">add section</a>
	</div>
	<div id="accordion">
		<h3 class="toggler">History</h3>
		<div class="element">
			<h4>Common ancestor</h4>
			<p>The first suggestion [...]</p>
			<blockquote>"Could one not say [...]</blockquote>
			<h4>The Origin of Species</h4>
			<p>In 1859, Charles Darwin's [...]</p>
			<blockquote>[P]robably all [...]</blockquote>
			<p>The famous closing [...]</p>
		</div>
 
		<h3 class="toggler">Evidence of universal common descent</h3>
		<div class="element">
			<h4>Common biochemistry and genetic code</h4>
			<p>All known forms [...]</p>
			<img src="images/phylogenetic_tree.png" width="340" height="230" align="right" alt="" />
			<p>The universality [...]</p>
			<h4>Phylogenetic trees</h4>
			<p>Another important [...]</p>
		</div>
 
		<h3 class="toggler">Examples of common descent</h3>
		<div class="element">
			<h4>Artificial selection</h4>
			<p>Artificial selection [...]</p>
			<img src="images/biglittledog.jpg" width="180" height="151" align="right" alt="" />
			<h4>Dog breeding</h4>
			<p>An obvious [...]</p>
		</div>
	</div>
</body>
</html>

Ce fichier recense 3 éléménts capitaux :

<div id="accordion">
</div>

C'est dans cette div que devront figurer tous vos élements dynamiques. Ne l'oubliez pas ;)

<h3 class="toggler">
</h3>

C'est en cliquant sur ces éléments que vous allez déclencher l'action (affichage ou masquage de la DIV).

<div class="element">
</div>

Ce sont les éléments qui seront masqués ou affichés

Enfin, un détail très important, n'oubliez pas de déclarer le DOCTYPE de votre document ainsi que de faire figurer le paramètre xmlns dans votre balise HTML :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

On s'en tiendra là pour cette première approche. Je vous conseille vivement d'aller fouiner sur le site de Mootools afin de tester dans un premier temps toutes les démos, afin de les mettre en application et ainsi maitriser ce Frameworks qui a de l'avenir ;)

10 oct. 2008

Un peu de lecture

Par Jean-Christophe Duvivier à 21:43

Mots Clés 4IM, Frameworks, Symfony,

Alors que pour la plupart des gens les bonnes résolutions se prennent lors de chaque nouvelle année civile, pour ma part, ça se passe plutôt à chaque nouvelle année scolaire.

the definitive guide to symfony

Quoi de neuf pour la rentrée 2008 ? La familiarisation avec un Frameworks. À la base je m'étais dit que j'allais développer une grosse application de A à Z, que ça serait une bonne expérience etc. Puis Ben, un pote de 4IM m'a brièvement parlé de sa récente expérience avec un Frameworks : PEAR. Ça m'a donné envie d'approfondir les recherches, et j'ai donc décidé de m'initier à Symfony, un Frameworks relativement jeune qui, à l'heure actuelle, est considéré comme l'un des Framworks les plus complets. Et pour connaître tout ses rouages, quoi de mieux qu'un book ?

Alors me voilà propriétaire, depuis aujourd'hui même, du "Definitive Guide to Symfony". Exclusivement rédigé en anglais, il promet d'être très intéressant. Je vous ferai part de mon expérience acquise en fur et à mesure, afin que vous puissiez apprendre avec moi ^^.

Propulsé par Dotclear - Hebergé par PlanetHoster - Thème Green Mantis par jchristophe
© jchristophe.fr 2008 - 2009
Valide CSS 2.1 CSS 2.1 Valide XHTML 1.0 XHTML Strict 1.0 Flux RSS RSS