11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,


J'ai récemment mis en ligne une mise à jour pour mon portfolio en ligne, visible à cette adresse.

A priori, tout est opérationnel (j'ai testé jusqu'en 1024*768, pour les versions récentes de Firefox, Chrome et IE), mais je viens de remarquer un bug, dont je n'arrive pas à trouver l'origine... Etant encore débutant en jQuery, je me tourne donc vers la communauté d'Alsa, pour savoir si quelqu'un pourrait m'aider à trouver une solution Smiley smile

En bref, lorsque l'on navigue dans les pages de références (pages 'single'), chacune permet de voir les visuels sous forme de slideshow, dont la largeur de sous-conteneur est calculée via jQuery, en fonction du nombre d'enfants.
Le problème, à l'heure actuelle, est que par moments ce script ne semble plus fonctionner, d'une page à l'autre ! J'imagine donc qu'il doit y avoir un problème dans mon code js... mais encore une fois, je ne suis pas encore assez aguerri pour pouvoir le résoudre seul, je pense Smiley decu

Voici donc le code concerné (en dessous, le js complet) :

var length = 0;
	$('.container > .entry-content p').each(function(){
		length += $(this).outerWidth(true);
	});
	$('.container > .entry-content').css('width', length);
	$('article .container').scrollTo('0px', 600, {axis:'x'});
	$('.slides a.nextnav').click(function(){
		$('article .container').scrollTo('+=430px', 600, {axis:'x'});
	});
	$('.slides a.prevnav').click(function(){
		$('article .container').scrollTo('-=430px', 600, {axis:'x'});
	});


$(document).ready(function(){
	// Responsive
	jResponsive = function(){
		var columnWidth = $('p.def-3').width();
		if(columnWidth <= 215){
			$('p.def-1 > span.txt').replaceWith('<span class="txt">Le <em>mot</em> ne veut absolument rien dire. C\'est un résumé, plus qu\'autre chose, d\'un certain état d\'esprit : opposé à l\'apparence comme fin en soi, pour privilégier les intentions</span>');
			$('p.def-2').replaceWith('<p class="def-2">premières. Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire</p>');
			$('p.def-3').replaceWith('<p class="def-3">davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');
		}else if(columnWidth <= 225){
			$('p.def-2').replaceWith('<p class="def-2">Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire</p>');
			$('p.def-3').replaceWith('<p class="def-3">davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');		
		}else if(columnWidth > 270){
			$('p.def-1 > span.txt').replaceWith('<span class="txt">Le <em>mot</em> ne veut absolument rien dire. C\'est un résumé, plus qu\'autre chose, d\'un certain état d\'esprit : opposé à l\'apparence comme fin en soi,</span>');
			$('p.def-2').replaceWith('<p class="def-2">pour privilégier les intentions premières. Une condition nécessaire à une expression plus juste. Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en</p>');
			$('p.def-3').replaceWith('<p class="def-3">dire davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');
			$('p.about span.nom').replaceWith('<span>J Paul Lescouzères,</span>');
		}else{
			$('p.def-1 > span.txt').replaceWith('<span class="txt">Le <em>mot</em> ne veut absolument rien dire. C\'est un résumé, plus qu\'autre chose, d\'un certain état d\'esprit : opposé à l\'apparence comme fin en soi, pour privilégier les intentions premières.</span>');
			$('p.def-2').replaceWith('<p class="def-2">Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire davantage quant</p>');
			$('p.def-3').replaceWith('<p class="def-3">à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');
			$('p.about span.nom').replaceWith('<span>Jean-Paul Lescouzères,</span>');
		}
	};
	jResponsive();
	// Responsive résolutions < 1440*900
	qResponsive = function(){
		var win2height = $(window).height();
		if(win2height < 786 || $(window).width() < 1215){
			$('#edito p span:not(.premiermot)').replaceWith('<span> je suis graphiste indépendant. J\'aime l\'image, et par-dessus tout les intentions. Le graphisme ne se limite pas à un support : il est &mdash; doit être &mdash; une volonté de (se) montrer, de s\'exprimer. </span>');
			$('p.def-1, p.def-2, p.def-3').hide();
			$('#contact .aword p').replaceWith('<p><span class="premiermot">Vous avez un projet ?</span> N\’hésitez pas à me contacter, et nous en parlerons.</p>');
		}else{
			$('#edito p span:not(.premiermot)').replaceWith('<span> je suis graphiste indépendant. J\'aime l\'image, et par-dessus tout les intentions : ce sont elles qui permettent à un projet de prendre forme, qu\'il s\'agisse d\'un simple visuel, ou d\’une interface complexe. Le graphisme ne se limite pas à un support : il est &mdash; doit être &mdash; une volonté de (se) montrer, de s\'exprimer. </span>');
			$('p.def-1, p.def-2, p.def-3').show();
			$('#contact .aword p').replaceWith('<p><span class="premiermot">Vous avez un projet ?</span> N\’hésitez pas à me contacter, et nous en parlerons. Je suis toujours heureux de relever les nouveaux défis, et d\'accompagner les personnes qui le souhaitent dans leur projet graphique, qu\'il soit web ou papier.</p>');
		}
	};
	qResponsive();
	// Hauteur header overwrite (pour scroll)
	Headeroverwrite = function(){
		var contenuHeight = $('#header-content').children().height();
		$('header#main').css({height:contenuHeight});
		$('nav#header-nav').css({top:contenuHeight-50});
		if(contenuHeight >= 165){
			$('section#services').children().css({height:contenuHeight});
		}else{
			$('section#services').children().css({height:165});
		};
	};
	Headeroverwrite();
	// On Resize
	$(window).resize(function(){
		jResponsive();
		qResponsive();
		Headeroverwrite();
	});
	// Nav header
	$('nav#header-nav ul li p').hide();
	$('nav#header-nav ul li').mouseenter(function() {
		$(this).children('p').animate({width: 'toggle'}, 300);
	}).mouseleave(function(){
		$(this).children('p').animate({width: 'toggle'}, 300);
	});
	// Scroll header
	$('header#main').scrollTo('#edito', 900, {axis:'x'});
	$('nav#header-nav li.pannel-1').click(function(){
		$('header#main').scrollTo('#edito', 900, {axis:'x'});
	});
	$('nav#header-nav li.pannel-2').click(function(){
		$('header#main').scrollTo('#apropos', 900, {axis:'x'});
	});
	$('nav#header-nav li.pannel-3').click(function(){
		$('header#main').scrollTo('#contact', 900, {axis:'x'});
	});
	// Services
	$('section#services hgroup').hide();
	$('section#services .cell').mouseenter(function(){
		$(this).children('hgroup').animate({height: 'toggle'}, 200);
	}).mouseleave(function(){
		$(this).children('hgroup').animate({height: 'toggle'}, 200);
	});
	// Articles index
	$('section#content article .entry-footer').hide();
	$('section#content article a').mouseenter(function(){
		$(this).children('.entry-footer').animate({height: 'toggle'}, 400);
	}).mouseleave(function(){
		$(this).children('.entry-footer').animate({height: 'toggle'}, 600);
	});
	// Scroll des images(single)
	var length = 0;
	$('.container > .entry-content p').each(function(){
		length += $(this).outerWidth(true);
	});
	$('.container > .entry-content').css('width', length);
	$('article .container').scrollTo('0px', 600, {axis:'x'});
	$('.slides a.nextnav').click(function(){
		$('article .container').scrollTo('+=430px', 600, {axis:'x'});
	});
	$('.slides a.prevnav').click(function(){
		$('article .container').scrollTo('-=430px', 600, {axis:'x'});
	});
	// Retour haut de page
	$('a.returnTop').hide();
	var winHeight = $(window).height();
	$(window).scroll(function(){
		if($(this).scrollTop() > (winHeight / 4)) {
			$('a.returnTop').fadeIn();
		}else{
			$('a.returnTop').fadeOut();
		};
	});
	$('a.returnTop').click(function(i){
		i.preventDefault();
		$('html, body').animate({ scrollTop: 0 }, 300);
	});
	// Formulaire de contact
	$('input, textarea').placeholder();
	$('form#cform').submit(function() {
		$('form#cform .error').remove();
		var hasError = false;
		$('.requiredField').each(function() {
			if($.trim($(this).val()) == '') {
				var labelText = $(this).prev('label').text();
				$('span.error').remove();
				$(this).parent().append('<span class="error">Veuillez compléter les champs requis.</span>');
				$(this).addClass('inputError');
				hasError = true;
			} else if($(this).hasClass('email')) {
				var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
				if(!emailReg.test($.trim($(this).val()))) {
					var labelText = $(this).prev('label').text();
					$('span.error').remove();
					$(this).parent().append('<span class="error">Veuillez compléter les champs requis.</span>');
					$(this).addClass('inputError');
					hasError = true;
				}
			}
		});
		if(!hasError) {
			var formInput = $(this).serialize();
			$.post($(this).attr('action'),formInput, function(data){
				$('p.succes').animate({width: 'toggle'}, 175);
			});
		}
		return false;	
	});
});


Il s'agit peut-être de l'ordre dans lequel sont appelés les différents scripts... Malheureusement, après quelques essais, je ne parviens pas à trouver de solution.
Merci donc par avance, à celles/ceux qui pourront m'aider à 'réparer' mon js ! Smiley biggrin
Modifié par soykje (24 May 2013 - 21:35)
Bonjour à tous,


Je m'excuse pour mon insistance, mais malgré mes diverses recherches/tentatives, je ne parviens pas à trouver l'origine de mon problème, avec mon code jQuery... Smiley decu N'étant pas expert, et à défaut d'un "jQuery validator", je reste bloqué avec un code apparemment incorrect.

Pour rappel, le souci concerne donc le script qui calcule la largeur de la div '.entry-content', dans une page de référence unique. Par moments, ce script ne semble pas s'exécuter, et mon slideshow ne s'affiche alors plus correctement (les images à l'intérieur ne s'affichant alors plus en ligne, mais en colonne...). Après diverses relectures, je ne vois pas trop où pourrait être le problème, et j'en déduis qu'il s'agit peut-être d'une erreur de syntaxe ?

Dans tous les cas, je vous retransmets donc ici mon code .js dans son intégralité, et si quelqu'un a le courage de s'y plonger un peu, pour m'aider à trouver l'origine du problème... ce serait super !


Merci d'avance ! Smiley smile

$(document).ready(function(){
	// Nav header
	$('nav#header-nav ul li p').hide();
	$('nav#header-nav ul li').mouseenter(function() {
		$(this).children('p').animate({width: 'toggle'}, 300);
	}).mouseleave(function(){
		$(this).children('p').animate({width: 'toggle'}, 300);
	});
	// Scroll header
	$('header#main').scrollTo('#edito', 900, {axis:'x'});
	$('nav#header-nav li.pannel-1').click(function(){
		$('header#main').scrollTo('#edito', 900, {axis:'x'});
	});
	$('nav#header-nav li.pannel-2').click(function(){
		$('header#main').scrollTo('#apropos', 900, {axis:'x'});
	});
	$('nav#header-nav li.pannel-3').click(function(){
		$('header#main').scrollTo('#contact', 900, {axis:'x'});
	});
	// Services
	$('section#services hgroup').hide();
	$('section#services .cell').mouseenter(function(){
		$(this).children('hgroup').animate({height: 'toggle'}, 200);
	}).mouseleave(function(){
		$(this).children('hgroup').animate({height: 'toggle'}, 200);
	});
	// Articles index
	$('section#content article .entry-footer').hide();
	$('section#content article a').mouseenter(function(){
		$(this).children('.entry-footer').animate({height: 'toggle'}, 400);
	}).mouseleave(function(){
		$(this).children('.entry-footer').animate({height: 'toggle'}, 600);
	});
	// Scroll des images(single)
	var length = 0;
	$('.container > .entry-content p').each(function(){
		length += $(this).outerWidth(true);
	});
	$('.container > .entry-content').css('width', length);
	$('article .container').scrollTo('0px', 600, {axis:'x'});
	$('.slides a.nextnav').click(function(){
		$('article .container').scrollTo('+=430px', 600, {axis:'x'});
	});
	$('.slides a.prevnav').click(function(){
		$('article .container').scrollTo('-=430px', 600, {axis:'x'});
	});
	// Retour haut de page
	$('a.returnTop').hide();
	var winHeight = $(window).height();
	$(window).scroll(function(){
		if($(this).scrollTop() > (winHeight / 4)) {
			$('a.returnTop').fadeIn();
		}else{
			$('a.returnTop').fadeOut();
		};
	});
	$('a.returnTop').click(function(i){
		i.preventDefault();
		$('html, body').animate({ scrollTop: 0 }, 300);
	});
	// Formulaire de contact
	$('input, textarea').placeholder();
	$('form#cform').submit(function() {
		$('form#cform .error').remove();
		var hasError = false;
		$('.requiredField').each(function() {
			if($.trim($(this).val()) == '') {
				var labelText = $(this).prev('label').text();
				$('span.error').remove();
				$(this).parent().append('<span class="error">Veuillez compléter les champs requis.</span>');
				$(this).addClass('inputError');
				hasError = true;
			} else if($(this).hasClass('email')) {
				var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
				if(!emailReg.test($.trim($(this).val()))) {
					var labelText = $(this).prev('label').text();
					$('span.error').remove();
					$(this).parent().append('<span class="error">Veuillez compléter les champs requis.</span>');
					$(this).addClass('inputError');
					hasError = true;
				}
			}
		});
		if(!hasError) {
			var formInput = $(this).serialize();
			$.post($(this).attr('action'),formInput, function(data){
				$('p.succes').animate({width: 'toggle'}, 175);
			});
		}
		return false;	
	});
	// Responsive
	jResponsive = function(){
		var columnWidth = $('p.def-3').width();
		if(columnWidth <= 215){
			$('p.def-1 > span.txt').replaceWith('<span class="txt">Le <em>mot</em> ne veut absolument rien dire. C\'est un résumé, plus qu\'autre chose, d\'un certain état d\'esprit : opposé à l\'apparence comme fin en soi, pour privilégier les intentions</span>');
			$('p.def-2').replaceWith('<p class="def-2">premières. Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire</p>');
			$('p.def-3').replaceWith('<p class="def-3">davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');
		}else if(columnWidth <= 225){
			$('p.def-2').replaceWith('<p class="def-2">Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire</p>');
			$('p.def-3').replaceWith('<p class="def-3">davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');		
		}else if(columnWidth > 270){
			$('p.def-1 > span.txt').replaceWith('<span class="txt">Le <em>mot</em> ne veut absolument rien dire. C\'est un résumé, plus qu\'autre chose, d\'un certain état d\'esprit : opposé à l\'apparence comme fin en soi,</span>');
			$('p.def-2').replaceWith('<p class="def-2">pour privilégier les intentions premières. Une condition nécessaire à une expression plus juste. Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en</p>');
			$('p.def-3').replaceWith('<p class="def-3">dire davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');
			$('p.about span.nom').replaceWith('<span>J Paul Lescouzères,</span>');
		}else{
			$('p.def-1 > span.txt').replaceWith('<span class="txt">Le <em>mot</em> ne veut absolument rien dire. C\'est un résumé, plus qu\'autre chose, d\'un certain état d\'esprit : opposé à l\'apparence comme fin en soi, pour privilégier les intentions premières.</span>');
			$('p.def-2').replaceWith('<p class="def-2">Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire davantage quant</p>');
			$('p.def-3').replaceWith('<p class="def-3">à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');
			$('p.about span.nom').replaceWith('<span>Jean-Paul Lescouzères,</span>');
		}
	};
	jResponsive();
	// Responsive résolutions < 1440*900
	qResponsive = function(){
		var win2height = $(window).height();
		if(win2height < 786 || $(window).width() < 1215){
			$('#edito p span:not(.premiermot)').replaceWith('<span> je suis graphiste indépendant. J\'aime l\'image, et par-dessus tout les intentions. Le graphisme ne se limite pas à un support : il est &mdash; doit être &mdash; une volonté de (se) montrer, de s\'exprimer. </span>');
			$('p.def-1, p.def-2, p.def-3').hide();
			$('#contact .aword p').replaceWith('<p><span class="premiermot">Vous avez un projet ?</span> N\’hésitez pas à me contacter, et nous en parlerons.</p>');
		}else{
			$('#edito p span:not(.premiermot)').replaceWith('<span> je suis graphiste indépendant. J\'aime l\'image, et par-dessus tout les intentions : ce sont elles qui permettent à un projet de prendre forme, qu\'il s\'agisse d\'un simple visuel, ou d\’une interface complexe. Le graphisme ne se limite pas à un support : il est &mdash; doit être &mdash; une volonté de (se) montrer, de s\'exprimer. </span>');
			$('p.def-1, p.def-2, p.def-3').show();
			$('#contact .aword p').replaceWith('<p><span class="premiermot">Vous avez un projet ?</span> N\’hésitez pas à me contacter, et nous en parlerons. Je suis toujours heureux de relever les nouveaux défis, et d\'accompagner les personnes qui le souhaitent dans leur projet graphique, qu\'il soit web ou papier.</p>');
		}
	};
	qResponsive();
	// Hauteur header overwrite (pour scroll)
	Headeroverwrite = function(){
		var contenuHeight = $('#header-content').children().height();
		$('header#main').css({height:contenuHeight});
		$('nav#header-nav').css({top:contenuHeight-50});
		if(contenuHeight >= 165){
			$('section#services').children().css({height:contenuHeight});
		}else{
			$('section#services').children().css({height:165});
		};
	};
	Headeroverwrite();
	// On Resize
	$(window).resize(function(){
		jResponsive();
		qResponsive();
		Headeroverwrite();
	});
});
Bonjour,

Ca ne me paraît pas évident mais si personne n'arrive à t'aider alors je vais essayer.

De quel façon la largeur de tes p.def peut-elle variée? au redimensionnement de la fenêtre, d'une page à une autre, lorsque tu lui attribut un texte différent? sinon de quel façon tu la fixe ?
Le fait de ne pas rappeler le calcul de la largeur de .entry-content dans $(window).resize n'est pas gênant?
De même au moment ou tu regarde seulement la largeur de p.def-3, pas besoin de regarder les autres?

je vois aussi qu'il te manque surement un morceau ici:
else if(columnWidth <= 225){
			[b]$('p.def-1')...[/b]
			$('p.def-2').replaceWith('<p class="def-2">Une condition nécessaire à une expression plus juste.<br/>Une idée est un projet, un potentiel créatif, qui n\'existe que par l\'objet qui lui correspond (et inversement).<br/>A l\'inverse du mot écrit qui se dévoile (sans pour autant nous en dire</p>');
			$('p.def-3').replaceWith('<p class="def-3">davantage quant à sa signification véritable...), la forme rendue étrangère au langage parlé, devient ce qu\'elle est : <em>un signe</em>, transmettant simplement un message, une idée.<br/><em>Soykje</em> ne veut absolument rien dire, et c\'est exactement là tout son sens.</p>');		
		}


Voila j'espère être plus en mesure de t'aider avec ces détails.
Bonjour, et merci pour ta réponse Tybar, je commençais à désespérer ! Smiley smile

Je vais donc essayer de te répondre le plus clairement possible :

1. Concernant la largeur de mes p.def, elle est définie en px, et identique pour chacune (def-1,def-2 et def-3). Cette dimension varie avec des media-queries. Et comme il s'agit de colonnes de texte que je veux "calées", je complète le tout en faisant glisser le contenu d'une colonne à l'autre, à certains moments, avec un replaceWith en jQuery...
Peut-être pas très catholique (?), mais étant donné la compatibilité incomplète des multi-colonnes en CSS3, c'est la solution qui m'apparaissait la moins lourde (moins qu'un plugin jQuery dédié, je pense).

2. Pour le calcul de la largeur de .entry-content, je n'avais pas pensé à le rappeler dans le resize... La largeur du contenu évolue certes (puisque la taille des images est réduite à certaines résolutions), en fonction de la largeur, mais au pire elle sera définie plus large que nécessaire, non ?

3. Enfin, étant donné que la largeur des 3 colonnes est identique, je n'ai eu besoin d'appeler qu'une seule largeur de colonne dans ma variable... A priori pas une erreur, non ?

4. Concernant le "morceau qui manque"... Il n'y a pas de modification pour p.def-1 dans cette partie, et il est redéfini, au pire, dans le else final... Donc pas besoin de le repréciser, si ?

Voilà, pour le moment j'ai pris le parti d'indiquer une min-width dans mon css, qui du coup n'est pas gênée et complète le jQuery. Une "esquive" dont j'espère pouvoir me passer une fois le problème résolu, mais qui permet au site de tourner pour l'instant...

Dans tous les cas, merci encore à toi, Tybar, pour ton aide sur ce problème !
Bonsoir,

Avec tes media queries tu es sûr que tu n'as pas des propriétés qui diffèrent alors qu'elles ne devraient pas? tu as fait des tests avec et sans? si tu ne refais pas tes calculs lorsqu'un media query change les styles ca doit poser problème.
Un lien m'aiderais à comprendre mieux le bug, sinon une description de ce qui le provoque et dans quelles conditions par ce qu'avec ce que tu dis ou du moins ce que je comprend je ne vois toujours pas.

a écrit :
2. Pour le calcul de la largeur de .entry-content, je n'avais pas pensé à le rappeler dans le resize... La largeur du contenu évolue certes (puisque la taille des images est réduite à certaines résolutions), en fonction de la largeur, mais au pire elle sera définie plus large que nécessaire, non ?

On peut tout à fait aller sur la page avec une petite fenêtre et l'agrandir ensuite.

a écrit :
3. Enfin, étant donné que la largeur des 3 colonnes est identique, je n'ai eu besoin d'appeler qu'une seule largeur de colonne dans ma variable... A priori pas une erreur, non ?

Ok dans ce cas pas de problème je suppose.

a écrit :
4. Concernant le "morceau qui manque"... Il n'y a pas de modification pour p.def-1 dans cette partie, et il est redéfini, au pire, dans le else final... Donc pas besoin de le repréciser, si ?

Pas tout à fait, puisque en dessous de 215 tu affiche un texte, lorsque l'on dépasse 215 rien ne se passe puisqu'en dessous de 225 tu ne fais rien, au dessus c'est le else qui s'applique, si on repasse en dessous de 225 alors on garde le texte fixé dans le else du coup ce n'est pas parfait mais pour un mot de différence c'est surement pas bien grave. Smiley lol


en portant un peu plus attention à ton code, je remarque que tu scroll de 430px, qui doit normalement être la largeur d'un p.def non?
// Scroll des images(single)
	var length = 0;
	$('.container > .entry-content p').each(function(){
		length += $(this).outerWidth(true);
	});
	$('.container > .entry-content').css('width', length);
	$('article .container').scrollTo('0px', 600, {axis:'x'});
	$('.slides a.nextnav').click(function(){
		$('article .container').scrollTo('+=430px', 600, {axis:'x'});
	});
	$('.slides a.prevnav').click(function(){
		$('article .container').scrollTo('-=430px', 600, {axis:'x'});
	});

Aussi tu passe par un plugin pour scrollTo je pense, mais un équivalent de ce genre est possible (on sait jamais):

    var scrollposition=0;
    $('.slides a.nextnav').click(function(){
        scrollposition +=$('p.def-1').outerWidth(true);
        $("div").animate({scrollLeft: scrollposition },1000);
    });

Un petit truc la pour des soucis d'optimisations commencer tes sélecteurs par l'id du parent le plus proche est recommandé, de même pour un sélecteur souvent utilisé le mettre dans une variable.(donc pas suivre mon exemple Smiley sweatdrop )

Et juste histoire de chipoter encore plus vérifie la ponctuation de tes phrases. Smiley crazy
Modifié par Tybar (26 May 2013 - 04:09)
Bonjour,


Tout d'abord, un grand merci pour le temps que tu acceptes de passer sur mon problème ; j'apprécie beaucoup, donc un grand merci ! Smiley smile

Tout d'abord, voici l'adresse de mon site : http://www.soykje.com. Le problème qui nous occupe, a lieu sur les pages d'articles seuls. Je pensais que tu l'avais déjà, donc toutes mes excuses...

Pour revenir à ma fonction de scroll, qui utilise le plugin scrollTo, je n'ai pas testé ta proposition de code, mais j'envisage, dans un second temps peut-être, d'utiliser un autre plugin en remplacement, swipejs, histoire d'optimiser le scroll pour les interfaces tactiles... Mais ce n'est pas encore d'actualité, puisque j'aimerais tout d'abord régler le problème actuel.
Actuellement, le scroll se fait par "tranche" de 430px, en prenant pour référence la hauteur maxi d'une image, qui serait aussi a priori sa largeur minimale... C'est très subjectif, mais je n'avais alors pas codé (solution de facilité ?) un scroll relatif, d'élément en élément.

Pour ce qui est des mediaqueries, et du resize, je viens de faire un essai : malheureusement, cela ne semble pas résoudre le problème... Smiley ohwell J'ai malgré tout intégré le calcul dans le resize, par acquis de conscience Smiley langue

Enfin, pour tes suggestions d'optimisation, ok pour le sélecteur dans une variable (il y a vraiment un apport ?), mais concernant le ciblage avec l'id du parent le plus proche, et cette histoire de ponctuation, je ne suis pas sûr de bien saisir... Tu aurais un exemple ?

Voilà, en tous cas merci encore à toi !
Modifié par soykje (26 May 2013 - 12:06)
Ok c'est noté, pour le lien no problem si tu l'as mis sur un autre sujet j'ai pas dû faire attention je passe au travers des fois.

Je t'invite à découvrir l'effet stop() ( http://api.jquery.com/stop/ ) utile pour éviter que tes animations ne se répète trop quand on passe la souris sur tes éléments. Je te laisse expérimenter et découvrir le potentiel d'une telle fonction.

Pour mieux comprendre l'optimisation un sujet intéressant et plutôt complet que je viens de trouver et qui est surement plus dans le juste que moi : http://geekos.fr/02/2012/jquery-astuces-et-conseils-pour-ameliorer-les-performances/

Quand je parlais des ponctuations c'était juste pour tes phrases en français pas dans le code. On trouve parfois des virgules en fin de phrase ou rien du tout Smiley langue

Bon c'est bien joli mais tes slides se portent toujours mal avec ca, d’ailleurs quand je suis tombé dessus je me suis rappelé qu'il faut rajouter un petit return false à la fin de tes fonction appliqué à tes flèches/liens pour éviter de faire remonter le scroll en haut de la page.
Il manque effectivement un rappel du calcul de .entry-content au redimensionnement de la fenêtre même si tu l'a intégré apparemment alors je veux bien voir tes modifs par ce que fouiner dans la version min c'est un peu horrible.
Au chargement d'une page aussi pendant un moment la taille de .entry-content était toujours la même d'une page à l'autre, une valeur prise par défaut? ou le calcul qui ne s’exécute pas mais peut-être qu'il s’exécute avant autres chose qui affecte sa taille, tu as essayé de donner un délai avant de le lancer pour voir?
Quand je passe d'une meta de petite résolution à une meta de grande résolution la dernière image se perd sur certaines pages, uniquement quand j'ai chargé la page avec une petite meta au départ pour l'une, alors que c'est l'inverse pour une autre... une des sources du problème peut-être mais j'aurais du mal à t'aider la dessus.

Je regarderais plus demain mais je ne prétend pas que j'y arriverais, je manque aussi un peu d’expérience pour comprendre toutes les logiques (et mystères) du web... Smiley sweatdrop
Bonjour Tybar,


Encore un énorme merci pour ta réponse, et tes conseils. Smiley smile

Pour le stop(), je l'ai donc appliqué comme suit (bien que je ne constatais pas de bug, de mon côté...) :

au lieu de
$(this).children('p').animate({width: 'toggle'}, 300);

j'ai mis
$(this).children('p').stop().animate({width: 'toggle'}, 300);

En revanche je ne l'ai pas intégré pour les vignettes d'articles, car cela cassait un effet "vague" que j'apprécie, lorsque l'on survole une ligne entière d'articles/vignettes... Smiley langue

Pour les questions d'optimisation, j'ai essayé d'optimiser en reprenant l'idée des variables, pour les sélecteurs récurrents. Je n'ai pas tout traité (choix des sélecteurs "pertinents", ...) un peu par flemme et parce qu'en l'état, il ne me semble pas qu'il s'agisse d'un véritable problème.

Pour les ponctuations dans mes phrases, oui je comprends... mais sauf oubli, tout ceci est volontaire, car comme tu l'auras remarqué il s'agit à chaque fois du contenu d'une colonne (qui ne s'arrête donc pas nécessairement en fin de phrase).

Pour ce qui est de l'utilisation des return false; j'ai donc ajouté une ligne pour chaque fonction click().

Au passage, désolé pour le js minifié, je n'avais pas fait attention... je t'ai remis en ligne la version "normale", pour que tu y voies plus clair.

Effectivement, le problème reste encore sans solution, mais le simple fait d'optimiser/corrgier les petits bugs aidera peut-être à nous mettre sur la piste ?

a écrit :
Au chargement d'une page aussi pendant un moment la taille de .entry-content était toujours la même d'une page à l'autre, une valeur prise par défaut? ou le calcul qui ne s’exécute pas mais peut-être qu'il s’exécute avant autres chose qui affecte sa taille, tu as essayé de donner un délai avant de le lancer pour voir?
Quand je passe d'une meta de petite résolution à une meta de grande résolution la dernière image se perd sur certaines pages, uniquement quand j'ai chargé la page avec une petite meta au départ pour l'une, alors que c'est l'inverse pour une autre... une des sources du problème peut-être mais j'aurais du mal à t'aider la dessus.


Alors là... je ne suis pas sûr de bien saisir de quoi tu parles... mais j'ai l'impression qu'il s'agit du même problème, de conteneur ('.entry-content') dont la width n'est pas tjrs bien calculée ?

Voilà. Merci encore en tous cas, et j'espère que nous parviendrons, malgré tout, à trouver une solution à cette histoire. Encore merci pour ta patience, et ton temps ! Smiley smile
Bonjour, alors j'ai pu regarder un peu plus et j'ai vu d'autres petits trucs,

En css il n'y a pas de propriété -moz-background-size, firefox marche comme tous le monde la dessus.

Je ne pense pas non plus que tu es besoin d'inclure tes fonctions click dans singlescroll()

a écrit :
Alors là... je ne suis pas sûr de bien saisir de quoi tu parles... mais j'ai l'impression qu'il s'agit du même problème, de conteneur ('.entry-content') dont la width n'est pas tjrs bien calculée ?

Oui c'est bien ca je suppose mais ca implique que plusieurs choses fonctionnent un peu de travers sur ce slide, ton script ne peut pas faire planter des images comme ca et je ne pense pas que ca puisse interférer de cette façon avec le calcul de .entry-content. Donc essaye de vérifier si il n'y à pas de différence entre les propriétés fixé aux images sur tous tes query et si ce n'est pas fait test en supprimant toutes les propriétés qui affecte .entry-content et un setTimeout sur l'appel de la fonction de calcul on sait jamais, je ne vois pas ce que ca pourrait être d'autre qu'un conflit quelque part.

Pour le reste ok ca devrait le faire et puis tu fais aussi un peu comme tu veux évidemment, tu veux juste de l'aide pour cet unique problème à la base...enfin gardons espoir. Smiley cligne

Sinon ton script plante merveilleusement bien Smiley smile
Bonjour,


Désolé pour le petit délai dans ma réponse. Je dois avouer que ce bug commence à m'agacer sérieusement... Smiley fache

A défaut de solution, je laisse de côté pour l'instant, préférant consacrer mon temps à trouver des clients, plutôt qu'à débugger (dans la mesure où le min-width que j'ai mis dans le CSS semble neutraliser le pb)...

Je continuerais donc à chercher une éventuelle solution au problème, mais sans doute pas avec la même assiduité... Bien sûr, si quelqu'un a des idées, suggestions, je m'efforcerais de faire les tests demandés, qui pourraient peut-être contribuer à apporter une solution...

Merci à toi Tybar, pour ton aide et le temps que tu as consacré à ce problème, et à très bientôt j'espère sur le forum !
Bonjour,

Franchement le calcul de .entry-content se porte beaucoup mieux maintenant, de mon coté je n'ai plus de problèmes, toujours bon au chargement de chaque page et au redimensionnement aussi.

Après il te reste le chargement des images qui déconne au changement de media-query, la dernière en particulier et ton scroll qui a une latence aléatoire au clique.

Navré de pas avoir pu être plus efficace je l'aurais laisser volontiers à quelqu'un d'autre mais visiblement ca se bousculer pas au portillon.

Et c'était un plaisir, je reste dans le coin au besoin à bientôt Smiley cligne