Bonjour,

J'ai recherché de nombreuses solutions sur le forum et sur internet pour corriger un soucis qui me bloque depuis plusieurs semaines. Je ne pense pas avoir assez de maîtrise en JS et JQuery pour arriver à solutionner cela seul et voilà pourquoi je fais appel à votre aide.

Ici, je vous présente le HEAD de mon site en cours de développement. Il sera plus clair une fois que j'aurais solutionné mes soucis, car pour une question de compréhension et pour retrouver facilement mon code j'ai tout inséré dans une seule balise SCRIPT à l'heure actuelle... Est ce une boulette provoquant des incompatibilité ??

A noter que les script séparément fonctionnent, dès que je tente de les mettre ensemble dans mon source... tout plante. JS non réactif, ou qui ne réalise pas ce qui est demandé.
J'ai utilisé l'une des dernières versions de JQuery qui dans les scripts n'était pas forcément celle ci mais plutôt la 1.2.X pour au moins l'un.

J'ai essayé de tout englober sous un même


jQuery.noConflict();
	
jQuery(function($){
    // code
});


J'ai aussi tenté de faire des clôtures mais ... sans résultat, déjà à mon avis, je les utilise probablement mal et je n'arrive pas à trouver THE solution Smiley ohwell

J'ai lu qu'il y avait une importance dans l'inclusion des fichiers JS... je n'ai pas trouvé de documentation précise à ce sujet.


La partie CSS


<!-- CSS affichage général -->
<link rel="stylesheet" href="./css/stylesheet.css" type="text/css" media="screen" />
					 
<!-- Correctif bug IE6 -->	
<link rel="stylesheet" href="./css/ie6fix.css" type="text/css" media="screen" />
			
<!-- CSS pour Script Post it news -->
<link rel="stylesheet" href="./news/post-it.css" type="text/css" media="screen" />
			
<!-- CSS affichage dynamique du background -->
<link rel="stylesheet" href="./css/background.css" type="text/css" media="screen" />
		
<!-- CSS pour affichage du Menu -->
<link rel="stylesheet" href="./css/styleMenu.css" type="text/css" media="screen"/>

<!-- CSS affichage des fancybox -->
<link rel="stylesheet" href="./js/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />  
 	  		
<!-- CSS affichage du slide haut de page -->
<link rel="stylesheet" href="./css/slide.css" type="text/css" media="screen" />
			
<!-- Script en rapport avec les bibliothèques et JQuery 1.4.4 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>

				 
<script type="text/javascript" src="./news/jquery.easynews.js"></script>
<script type="text/javascript" src="./js/jquery-ui-1.8.5.custom.min.js"></script>
<script type="text/javascript" src="./js/jquery.easing.1.3.js"></script>
				

<!-- Slide supérieur -->
<script src="./js/slide.js" type="text/javascript"></script>

<!-- Image popup -->
<script type="text/javascript" src="./js/fancybox/jquery.mousewheel-3.0.4.pack.js"></script>
<script type="text/javascript" src="./js/fancybox/jquery.fancybox-1.3.4.pack.js"></script>


<!-- menu -->
<style>
	span.reference{
		position:fixed;
		left:10px;
		bottom:10px;
		font-size:12px;
	}
	span.reference a{
		color:#aaa;
		text-transform:uppercase;
		text-decoration:none;
		text-shadow:1px 1px 1px #000;
		margin-right:30px;
	}
	span.reference a:hover{
		color:#ddd;
	}
	ul.sdt_menu{
		margin-left:auto;
		margin-right:auto;
		margin-top:110px;
	}
</style> 
				
<!-- PNG FIX for IE6 -->
<!--  http://24ways.org/2007/supersleight-transparent-png-in-ie6  -->
<!--[if lte IE 6]>
        <script type="text/javascript" src="js/pngfix/supersleight-min.js"></script>
<![endif]-->


Ce qui suit la partie JS

<script>
	// JS Gestion de la fancybox  http://fancybox.net/
 
	$(document).ready(function($){ {
		$("a#num_utiles").fancybox({
			'overlayColor'		: '#000',
			'overlayOpacity'	: 0.9,
			'transitionIn'	: 'elastic',
			'transitionOut'	: 'elastic'
		});
	}); 

	// JS Gestion du background dynamique
	$(document).ready(function($){ {
				
		(function(){ 
			 var i = 0; 
		         setInterval(function(){ 
						        	
				//on cache l'image immédiatement 
				$("#backgroundImage").removeClass("bg1, bg2").fadeOut(150, function(){ 
					//on la ré-affiche avec un effet de transparence 
					$("#backgroundImage").addClass("bg"+(i++%2 + 1)).fadeIn(500); 
				});
			}, 10000);
		})(); 
	});
						
	// JS Gestion du post it de news			
	$(document).ready(function() { 
		var newsoption1 = {
			firstname: "mynews", //id de la div contenant les news
			secondname: "showhere", //id du conteneur où les news seront affichées
			fourthname:"news_button", //la div qui contient les images de nvigation (suivant, precedent, pause)
			newsspeed:'6000' //vitesse de defilement de news
		}
		$.init_news(newsoption1);
		var myoffset=$('#news_button').offset();
		var mytop=myoffset.top-1;
		$('#news_button').css({top:mytop});
	}); 

				
	// JS Gestion du MENU
	$(function() {
	       /**
		* for each menu element, on mouseenter, 
		* we enlarge the image, and show both sdt_active span and 
		* sdt_wrap span. If the element has a sub menu (sdt_box),
		* then we slide it - if the element is the last one in the menu
		* we slide it to the left, otherwise to the right
		*/
		$('#sdt_menu > li').bind('mouseenter',function(){
			var $elem = $(this);
			$elem.find('img')
			.stop(true)
			.animate({
				'width':'170px',
				'height':'170px',
				'left':'0px'
			},400,'easeOutBack')
			.andSelf()
			.find('.sdt_wrap')
		        .stop(true)
			.animate({'top':'140px'},500,'easeOutBack')
			.andSelf()
			.find('.sdt_active')
			.stop(true)
			.animate({'height':'170px'},300,function(){
				var $sub_menu = $elem.find('.sdt_box');
				if($sub_menu.length){
					var left = '170px';
				        if($elem.parent().children().length == $elem.index()+1)
					left = '-170px';
				        $sub_menu.show().animate({'left':left},200);
				}	
			});
		}).bind('mouseleave',function(){
			var $elem = $(this);
			var $sub_menu = $elem.find('.sdt_box');
			if($sub_menu.length)
				$sub_menu.hide().css('left','0px');
			
			$elem.find('.sdt_active')
			.stop(true)
			.animate({'height':'0px'},300)
			.andSelf().find('img')
			.stop(true)
			.animate({
				'width':'0Px',
				'height':'0px',
				'left':'85px'},400)
				.andSelf()
				.find('.sdt_wrap')
				.stop(true)
				.animate({'top':'25px'},500);
			});
		});


		$(function(){
			// Accordion
			$("#accordion").accordion({ header: "h3" });
	
			// Tabs
			$('#tabs').tabs();
	
			// Dialog			
			$('#dialog').dialog({
				autoOpen: false,
				width: 600,
				buttons: {
					"Ok": function() { 
						$(this).dialog("close"); 
					}, 
					"Cancel": function() { 
						$(this).dialog("close"); 
					} 
				}
			});
				
			// Dialog Link
			$('#dialog_link').click(function(){
				$('#dialog').dialog('open');
				return false;
			});
			// Datepicker
			$('#datepicker').datepicker({
				inline: true
			});
				
			// Slider
			$('#slider').slider({
				range: true,
				values: [17, 67]
			});
			
			// Progressbar
			$("#progressbar").progressbar({
				value: 20 
			});
				
			//hover states on the static widgets
			$('#dialog_link, ul#icons li').hover(
				function() { $(this).addClass('ui-state-hover'); }, 
				function() { $(this).removeClass('ui-state-hover'); }
			);
			
		});
</script>


Déjà, une question me trotte dans l'esprit, y a t il une erreur de code ??? Si vous avez une idée pour m'aider à solutionner ce soucis, grand merci car je vais laisser tomber ces librairies si ça continue.
J'ai perdu un temps fou et je ne sais plus quoi faire. Smiley bawling Smiley decu
Modifié par WuKoDLaK (18 Jan 2011 - 23:29)
bonsoir
J'ai essayé de corriger un peu ton code.
J'ai surtout retirer le $(function(){}) ou $(document).ready(function(){}); qui ne devrait servir qu'une fois dans ton script puisqu'il test la présence de jquery et lance le script quand le dom est prêt.
Par contre je n'ai pas regardé tous dans le détail.
De plus je n'ai pas corrigé la partie JS gestion du menu car je vois trop d'erreur et du coup je me demande si j'ai bien compris le code. Peut être quelqu'un d'autre pourra t'aider pour ça.

Pour debuger le js je te conseil d'installer le plugin firebug pour firefox. Tu pourras corriger pas à pas tous les bugs.

Quand à l'ordre d'appel de tes scripts, ça me semble correcte. Tu appelles les libs en premiers.


$(function() { 
  // JS Gestion de la fancybox   http://fancybox.net/  
  $("a#num_utiles").fancybox({ 
    'overlayColor'        : '#000', 
    'overlayOpacity'    : 0.9, 
    'transitionIn'    : 'elastic', 
    'transitionOut'    : 'elastic' 
  }); 
   
  // JS Gestion du background dynamique 
  var i = 0;  
  setInterval(function(){  
    //on cache l'image immédiatement  
    $("#backgroundImage").removeClass("bg1, bg2").fadeOut(150, function(){  
      //on la ré-affiche avec un effet de transparence  
      $("#backgroundImage").addClass("bg"+(i++%2 + 1)).fadeIn(500);  
    }, 10000);
  });
  // JS Gestion du post it de news             
  var newsoption1 = { 
    firstname: "mynews", //id de la div contenant les news 
    secondname: "showhere", //id du conteneur où les news seront affichées 
    fourthname:"news_button", //la div qui contient les images de nvigation (suivant, precedent, pause) 
    newsspeed:'6000' //vitesse de defilement de news 
  } 
  $.init_news(newsoption1);
  
  var myoffset=$('#news_button').offset(); 
  var mytop=myoffset.top-1;
  
  $('#news_button').css({top:mytop}); 
   
  // Accordion 
  $("#accordion").accordion({ header: "h3" }); 
  
  // Tabs 
  $('#tabs').tabs(); 
  
  // Dialog             
  $('#dialog').dialog({ 
    autoOpen: false, 
    width: 600, 
    buttons: { 
      "Ok": function() {  
        $(this).dialog("close");  
      }, 
      "Cancel": function() {  
        $(this).dialog("close");  
      }  
    } 
  }); 
  
  // Dialog Link 
  $('#dialog_link').click(function(){ 
    $('#dialog').dialog('open'); 
    return false; 
  }); 
  // Datepicker 
  $('#datepicker').datepicker({ 
    inline: true 
  }); 
  
  // Slider 
  $('#slider').slider({ 
    range: true, 
    values: [17, 67] 
  }); 
  
  // Progressbar 
  $("#progressbar").progressbar({ 
    value: 20  
  }); 
  
  //hover states on the static widgets 
  $('#dialog_link, ul#icons li').hover(function() {
    $(this).addClass('ui-state-hover');
    }, function() {
      $(this).removeClass('ui-state-hover');
    }
  );
});


ps: si tu as une page en ligne ça aiderait parce que je pense qu'il y a pas mal d'erreurs à débugger.
Modifié par joska (19 Jan 2011 - 01:24)
Bonjour,

Merci pour ton intérêt à ma question joska ! J'ai donc testé ce que tu m'as proposé, mais rien n'y a fait ... :calim2:

J'ai donc pris le temps de refaire module par module ce que je voulais en sorti et donc voici un lien contenant source et démos!

Lien vers les DEMOS


Le site dans sa version 1 en lien ici, était trop simpliste et une demande m'avait été faite de refondre celui-ci pour en faire quelques chose d'attrayant et plus d'actualité. Je me suis donc remis en quête de nouveautés et j'ai donc trouvé ces nouvelles utilisations de JS et autres !

J'ai réussi à me donner une idée de la page d'accueil que je souhaitais mettre en place.

- Une barre supérieur qui se cache à volonté, avec gestion de contact de l'amicale par email, une gestion par login pour que certains utilisateur aient des droits précis.

- Un menu assez visuel par section quitte à avoir un sous menu dans les futurs pages du site.

- Un système de news qui défilent pour donner les dernières informations et qu'elles soient facilement visibles

- Un rappel des numéros d'urgence nationaux et locaux

- Un background dynamique

- Une galerie d'images qui défilent avec lien sur la rubrique concernée (option)

La version la plus stable que j'ai réussi à obtenir (avant tes modif joska) est celle-ci Menu/Slide/Image semblent fonctionner, excepté les news... J'ai ensuite réorganisé le code selon des explications que j'ai pu obtenir sur le net pour obtenir celle-ci mais rien n'y fait. j'ai vu tes modifications concernant les { mais ça n'a rien changé apparemment
Modifié par WuKoDLaK (20 Jan 2011 - 22:28)
Alors je pense que ça fait beaucoup de js pour une seule page mais voilà comment je pense que tu dois faire.

D'abord dans ton head tu charges les css et la bibliotheque jquery


    <!-- Fancy box css -->    
    <link rel="stylesheet" type="text/css" href="jquery.fancybox-1.3.4.css" media="screen" />
    
  	<!-- styleMenu css -->    
    <link rel="stylesheet" href="styleMenu.css" type="text/css" media="screen"/>
    
    <!-- slide css -->
    <link rel="stylesheet" href="slide.css" type="text/css" media="screen" />
  		
    <!-- General style -->
    <link rel="stylesheet" href="style.css" />

    <!-- Load jQuery from google -->
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>


Ensuite juste à la fin du body, avant la balise </body> tu charges tes plugins. Tu charges également en dernier le fichier js qui va initialiser tes fonctions. Ça t'évite d'avoir le js dans la page html.

<!-- Plugin -->
<script type="text/javascript" src="jquery.easing.1.3.js"></script>

<!-- Fancy box js -->
<script type="text/javascript" src="jquery.mousewheel-3.0.4.pack.js"></script>
<script type="text/javascript" src="jquery.fancybox-1.3.4.pack.js"></script>

<!-- easynews js -->
<script type="text/javascript" src="jquery.easynews.js"></script>

<!-- General js -->
<script type="text/javascript" src="site.js"></script>


Et dans ce fichier site.js tu charges tes effets.

$(function() {

  /*
   Fancy box
  */
  $("a#numUtiles").fancybox({
    'overlayColor'		: '#000',
    'overlayOpacity'	: 0.9,
    'transitionIn'	: 'elastic',
    'transitionOut'	: 'elastic'
  });

  /*
   styleMenu
  */
  /**
  * for each menu element, on mouseenter, 
  * we enlarge the image, and show both sdt_active span and 
  * sdt_wrap span. If the element has a sub menu (sdt_box),
  * then we slide it - if the element is the last one in the menu
  * we slide it to the left, otherwise to the right
  */
  $('#sdt_menu > li').bind('mouseenter',function(){
    var $elem = $(this);
    $elem.find('img')
    .stop(true)
    .animate({
      'width':'170px',
      'height':'170px',
      'left':'0px'
    },400,'easeOutBack')
    .andSelf()
    .find('.sdt_wrap')
    .stop(true)
    .animate({'top':'140px'},500,'easeOutBack')
    .andSelf()
    .find('.sdt_active')
    .stop(true)
    .animate({'height':'170px'},300,function(){
      var $sub_menu = $elem.find('.sdt_box');
      if($sub_menu.length){
        var left = '170px';
        if($elem.parent().children().length == $elem.index()+1)
          left = '-170px';
        $sub_menu.show().animate({'left':left},200);
      }	
    });
  }).bind('mouseleave',function(){
    var $elem = $(this);
    var $sub_menu = $elem.find('.sdt_box');
    if($sub_menu.length)
      $sub_menu.hide().css('left','0px');
    $elem.find('.sdt_active')
    .stop(true)
    .animate({'height':'0px'},300)
    .andSelf().find('img')
    .stop(true)
    .animate({
      'width':'0Px',
      'height':'0px',
      'left':'85px'},400)
    .andSelf()
    .find('.sdt_wrap')
    .stop(true)
    .animate({'top':'25px'},500);
  });

  /*
   easynews
  */
  var newsoption1 = {
    firstname: "mynews", //id de la div contenant les news
    secondname: "showhere", //id du conteneur o? news seront affich?
    fourthname:"news_button", //la div qui contient les images de nvigation (suivant, precedent, pause)
    newsspeed:'6000' //vitesse de defilement de news
  }
  $.init_news(newsoption1);
  var myoffset=$('#news_button').offset();
  var mytop=myoffset.top-1;
  $('#news_button').css({top:mytop});


  /*
   slide
  */
	// Expand Panel
	$("#open").click(function(){
		$("div#panel").slideDown("slow");
	
	});	
	
	// Collapse Panel
	$("#close").click(function(){
		$("div#panel").slideUp("slow");	
	});		
	
	// Switch buttons from "Log In | Register" to "Close Panel" on click
	$("#toggle a").click(function () {
		$("#toggle a").toggle();
	});		


});

Ça devrait ressembler à quelque chose comme ça.
Pense bien sur à modifier les chemins et ça devrait bien marcher. Par contre autant de javascript va faire exploser les ordinateurs de tes visiteurs.
Bonjour,

Merci de ta réponse détaillée. Je ne pensais qu'on avait autant de contraintes d'exécutions avec les scripts JS. J'ai bien lu de la documentation parlant des version compressées ou pas mais la question qui en résulte est, comment utiliser divers modules JS sur un même site. Les sites actuels utilisent du JS de partout, les galeries d'images, les menus, ...
Dans ce cas là, comment font ils ?? utilisation du principe des iframe ? (qui de mémoire étaient déconseillées il y a quelques temps déjà)

J'ai gardé le principe que j'avais développé il y a quelques années (ioups) pour faire mon site sur base html/php/css. Il me permettait de d'avoir une partie du site commune et de n'avoir à changer que la partie contenu lors du clique sur des liens...

demi_page1.php : contient tout le début du site de <html> jusqu'au DIV "contenu"
demi_page2.php : contient toute la fin du site depuis la fermeture de la balise "contenu" jusqu'à </html>

respectivement ils feront appels aux différents fichiers nécessaires à leur fonctionnement.

un fichier de meta
un fichier de configuration
les appels link / script
...

L'arrivée sur le site d'un visiteur les amène sur index.php. ce fichier fait au début et à la fin appel à un include des demi_pageX.php. La partie centrale à ce moment fait appel au code adéquate.
Je mets en exemple celui de mon site :

Fichier index.php

<?

include("include.inc.php") ;
// inclusion des données de configuration du site et principalement des tests d'existence de fichiers (contre les erreurs 404)

/************************************************************************/
/* Projet site web : Site de l'amicale des sapeurs pompiers du mans			
/* Societe         : néant    						
/************************************************************************/
/* index.php   		         			        
/*									
/*									
/* 	Auteurs :              Ronan BAUVAIS                            
/*									
/* 	Date de dernière modif	 : 15/01/2011 22:00      		
/*									
/*									
/************************************************************************/
/*									
/*  - Page d'accueil du site, ici est affiché la partie générale du site.
/*    en plus des données communes à toutes les pages (demi_page1 et 2),
/*    on y retrouve le rappel des numéros d'urgence et le défilement des news
/*									
/************************************************************************/


   include ("./demi_page1.php") ; 
?>
   
    <a id="num_utiles" href="./images/num_utiles.jpg"><img alt="num_utiles" src="./images/num_utiles_s.jpg" /></a>
				
<?
   include ("./news/post-it.html") ;
   include ("./demi_page2.php") ;
?>	


et le fichier post-it.html qui est appelé


<div id="mynews"  style="display:none" > <!---div contenant les news  ------>
	<div id="news1" class="news_style" > <!---1er news ------>
		<h1>Nouveau graphisme</h1>
		<h2><p>D'ici peu cette nouvelle version du site sera disponible...<br/>
							Patience,<br/>J'espère qu'elle vous plaira !</p></h2>		
			<a href="#">Lire la suite...</a>
	</div>
	<div id="news2" class="news_style" > <!---2eme news ------>
		<h1>Réunion Amicale</h1>
		<h2><p>Réunion le 25/01/2010 éé</p></h2>		
			<a href="#">Lire la suite...</a>
	</div>
</div>
<div id="post-it" class="post-it">
	<div align="left" id="mynewsdis"><!---div pour afficher les news  ------>
		<div class="news_border"><!----cadre des news---->
			<div id="showhere" class="news_show"><!----le texte des news---->
			</div>
		</div>
		<div class="buttondiv" id="news_button"><!---bouton de navigation ------>
			<img src="./news/prev.gif" align="absmiddle" id="news_prev"><img src="./news/pause.gif" align="absmiddle" id="news_pause"><img src="./news/next.gif" align="absmiddle" id="news_next" >
		</div>
	</div>
</div>


Voilà pour cet exemple.
Modifié par WuKoDLaK (21 Jan 2011 - 09:07)
Oublie les iframe.

Pour la tonne de js les gros sites ont des serveurs adéquates. Pour tester la vitesse de ton site je te conseil l'addon firefox pagespeed

Sinon c'est pas qu'il y ai tellement de contrainte en js. Peu importe comment tu construits ta page, include ou autre, car de toute façon, au final le javascript se charge en surcouche de la page html générée.

Pour le js compressé d'après ce que j'ai compris, le fichier est lu ligne après ligne. Si il est compressé sur une seul ligne il se charge plus vite.
Ensuite tu peux essayer de combiner tous tes scripts en un seul fichier. Ce qui peut être plus compliqué parfois.

Tant que tu es en développements laisses tes modules bien séparés. Fait comme je t'ai montré. en chargeant le css en premier puis les lib et seulement en derniers les site.js qui va initialiser tous les modules.
Tu aviseras à la fin si tu as besoin de faire plus.
Modifié par joska (21 Jan 2011 - 11:44)
OK merci de ta réponse, je vais tester ce que tu m'as montré ce soir ou demain si j'ai le temps.
Un peu pris avec le taff ce week end... on connait pas les jours fériés ^^
Salut joska,

je reviens vers toi car tu m'as bien aidé, nombreux ont regardés ce post sans y prêter attention et je te remercie !

après de nombreuses recherches et tests, j'ai trouvés 2 semblant de réponses.

Premièrement firebug indique un soucis du côté de cet appel :

$.init_news(newsoption1);


et lorsque je supprime l'appel du script jquery UI :

<script type="text/javascript" src="./js/jquery-ui-1.8.5.custom.min.js"></script>


le script du post-it semble fonctionner.
J'ai repris mon code et j'ai supprimé ce script et trouvé une solution alternative, qui elle fonctionne.

Je n'ai donc qu'une partie de la réponse toujours est il que ça fonctionne maintenant. je reprends donc le chemin des lignes de codes pour avancer le site Smiley biggol et je vais appliquer ce que tu m'as conseillé plus haut le rendre plus lisible et plus fiable.

Merci encore.
Modifié par WuKoDLaK (24 Jan 2011 - 14:39)