11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour !

Premier message sur le forum !

Je suis actuellement en stage pour faire un site web sauf que dans mon entreprise je suis le seul a maîtriser un le langage web.

J'ai fais une page avec plusieurs onglet grâce à l'outil Tabulous.JS ce qui me donne un résultat comme ceci : upload/58956-apercu2.png

Les différents onglets sont composés de formulaire. Le problème est que (je crois avoir compris) que mes différents formulaire se superpose du premier au dernier (donc le 3 éme est tout en haut). Je ne peux alors saisir ni dans le deuxième ni dans le troisième.

La solution que j'ai trouvé via mes recherche serait soit de mettre un z-index de 2 pour celle active et un z-index de 1 pour celle non active. Cependant n'ayant aucune connaissance en JS je n'arrive pas a parvenir a mon résultat final.

Je précise que en mettant un z-index de 2 sur mon premier formulaire (onglet 1) dans mon CSS cela fonctionne TRES bien pour le premier formulaire (cependant les deux autres ne sont donc plus remplissable).

Je vous donne le code css si jamais vous pouvez m'indiquer ou mettre ces deux propriétés !



/*!
 * strength.js
 * Original author: @aaronlumsden
 * Further changes, comments: @aaronlumsden
 * Licensed under the MIT license
 */
;(function ( $, window, document, undefined ) {

    var pluginName = "tabulous",
        defaults = {
            effect: 'scale'
        };

       // $('<style>body { background-color: red; color: white; }</style>').appendTo('head');

    function Plugin( element, options ) {
        this.element = element;
        this.$elem = $(this.element);
        this.options = $.extend( {}, defaults, options );
        this._defaults = defaults;
        this._name = pluginName;
        this.init();
    }

    Plugin.prototype = {

        init: function() {

            var links = this.$elem.find('a');
            var firstchild = this.$elem.find('li:first-child').find('a');
            var lastchild = this.$elem.find('li:last-child').after('<span class="tabulousclear"></span>');

            if (this.options.effect == 'scale') {
             tab_content = this.$elem.find('div').not(':first').not(':nth-child(1)').addClass('hidescale');
            } else if (this.options.effect == 'slideLeft') {
                 tab_content = this.$elem.find('div').not(':first').not(':nth-child(1)').addClass('hideleft');
            } else if (this.options.effect == 'scaleUp') {
                 tab_content = this.$elem.find('div').not(':first').not(':nth-child(1)').addClass('hidescaleup');
            } else if (this.options.effect == 'flip') {
                 tab_content = this.$elem.find('div').not(':first').not(':nth-child(1)').addClass('hideflip');
            }

            var firstdiv = this.$elem.find('#tabs_container');
            var firstdivheight = firstdiv.find('div:first').height();

            var alldivs = this.$elem.find('div:first').find('div');

            alldivs.css({'position': 'absolute','top':'40px'});

            firstdiv.css('height',firstdivheight+'px');

            firstchild.addClass('tabulous_active');

            links.bind('click', {myOptions: this.options}, function(e) {
                e.preventDefault();

                var $options = e.data.myOptions;
                var effect = $options.effect;

                var mythis = $(this);
                var thisform = mythis.parent().parent().parent();
                var thislink = mythis.attr('href');


                firstdiv.addClass('transition');

                links.removeClass('tabulous_active');
                mythis.addClass('tabulous_active');
                thisdivwidth = thisform.find('div'+thislink).height();

                if (effect == 'scale') {
                    alldivs.removeClass('showscale').addClass('make_transist').addClass('hidescale');
                    thisform.find('div'+thislink).addClass('make_transist').addClass('showscale');
                } else if (effect == 'slideLeft') {
                    alldivs.removeClass('showleft').addClass('make_transist').addClass('hideleft');
                    thisform.find('div'+thislink).addClass('make_transist').addClass('showleft');
                } else if (effect == 'scaleUp') {
                    alldivs.removeClass('showscaleup').addClass('make_transist').addClass('hidescaleup');
                    thisform.find('div'+thislink).addClass('make_transist').addClass('showscaleup');
                } else if (effect == 'flip') {
                    alldivs.removeClass('showflip').addClass('make_transist').addClass('hideflip');
                    thisform.find('div'+thislink).addClass('make_transist').addClass('showflip');
                }


                firstdiv.css('height',thisdivwidth+'px');

                


            });

           


         
            
        },

        yourOtherFunction: function(el, options) {
            // some logic
        }
    };

    // A really lightweight plugin wrapper around the constructor,
    // preventing against multiple instantiations
    $.fn[pluginName] = function ( options ) {
        return this.each(function () {
            new Plugin( this, options );
        });
    };

})( jQuery, window, document );




Si jamais il vous manque des informations ou vous avez des questions je serais ravis de vous compléter (c'est la première fois que je poste sur un forum).

Merci à vous
Modérateur
Bonjour choubaka16 et bienvenu du coup !


C'est dur de regarder ça sans le bout de HTML et de CSS qui vont avec... l’idéal pour les autres reste de pouvoir accéder à la page ou à un exemple en ligne mais passons.

choubaka16 a écrit :
Je vous donne le code css si jamais vous pouvez m'indiquer ou mettre ces deux propriétés !
Tu nous as donné un beau code Js mais absolument pas de CSS Smiley lol
Si c'était un lapsus alors il était révélateur car c'est une propriété CSS, donc à ajouter dans le fichier CSS. Si tu regarde le DOM généré, quand tu changes d'onglet ton contenu doit avoir une classe "active" (comme "tabulous_active" mais je sais pas si c'est le contenu ou juste le menu qui a cette classe).
Il suffit de mettre le z-index (ou tout autre style) souhaité dans cette classe qui n'est ajouté en Js qu'a l'élément actif.

Je ne sais pas si j'ai été bien clair, n'hésite pas si jme suis emmêlé.

Bon code Smiley murf
Administrateur
Bonjour et bienvenue, Smiley smile

donc ton tuteur de stage ne connaît rien au domaine abordé par ton stage... J'adore (et c'est à propos de ton organisme de formation que la moutarde me monte au nez avant l'entreprise...). 'fin bref

+1 avec ce qu'a dit _laurent, je reformulerai juste une phrase :
_laurent a écrit :
Il suffit de mettre le z-index (ou tout autre style) souhaité dans cette classe qui n'est ajouté en Js qu'a l'élément actif.

mettre la propriété CSS z-index (avec une valeur formant une instruction) dans une règle CSS dont le sélecteur sera cette classe, classe qui n'est ajoutée en JS/jQuery qu'à l'élément HTML actif.
Merci tout les deux.

Eh oui, il est dur le temps où il faut trouver des stages (il me fait faire des truc pas correct en code, mais bon le maître de stage doit être content ) ...

Je me permet de négligé vos réponse car j'ai trouvé une solution, qui font EN PARTIE.

Je m'explique, je me suis servie de la première réponse et d'autre forum pour élaborer un petit code :

Création d'un petit algo JS :


function z(el1, el2) {
  if(typeof el1=='string') { el1 = document.getElementById(el1); }
  if(typeof el2=='string') { el2 = document.getElementById(el2); }
 
  var z1 = parseInt(el1.style.zIndex,10);
  var z2 = parseInt(el2.style.zIndex,10);
  if(z1<z2) {
    el1.style.zIndex = z2;
    el2.style.zIndex = z1;
  }
}


Application à l'html dans mon " menu "


<li><a href="#numero2" onclick="z(numero2,'numero1');" title="">Descriptif Maison</a></li>
<li><a href="#numero1" onclick="z(numero1,'numero2');" title="">Tarifs unitaires </a></li>


Ainsi qu'au niveau des div

La première

<div style="z-index:2;" id="numero2"  >


La seconde

<div style="z-index:1;" id="numero1" >


Tout fonctionne, je passe de l'un a l'autre sans problème. Je précise que la balise style disparaîtra et je le mettrais dans mon code CSS, c'est juste pour éviter de le pourrir pendant la phase de test pour éviter plein de modification .

Il faut maintenant que je fasse de même mais avec une 3 ème div ! Et la sa se complique .... Aucun résultat probant pour l'instant.
choubaka16 a écrit :
Il faut maintenant que je fasse de même mais avec une 3 ème div ! Et la sa se complique .... Aucun résultat probant pour l'instant.

C'est pour ça qu'il faut généralement suivre les conseils qu'on te donne sur un forum où tu es toi-même venu poser une question... Dis-toi que ceux qui répondent savent un peu ce qu'ils font (mais juste un peu je te l'accorde Smiley langue ).

Si tu appliques ce qui t'a été dit, tu peux avoir un truc plus général

CSS :

[id^=numero] {z-index:-1}
[id^=numero].taClasse {z-index:1}


JS :

var a = document.querySelectorAll("[href^=#numero]"),
	x = 0,
	l = a.length;

for ( ; x<l; x++) a[x].addEventListener("click", function (e){
	
	e.preventDefault();

	var div = document.querySelectorAll("[id^=numero]"),
		x   = 0,
		l   = div.length;
	
	for ( ; x<l; x++) div[x].className = div[x].className.replace("taClass", "");

	this.className += " taClass";

}, false);


JQuery : (à confirmer)

$("[href^=#numero]").click(function (e){
	
	e.preventDefault();

	$("[id^=numero]").removeClass("taClasse");
	$(this).addClass("taClasse");
	
});
Je te remercie

Je testerais demain (je n'ai pas le code sous la main)

J'ai utilisé mon code car je n'avais pas vue qu'il m'avait répondu !
Oups,

Je pensais pouvoir modifier mon dernier message, désolé pour le flood. Après test Felipe je n'ai pas réussi a ta manière dans un exemple simple

Je pense que ma classe correspond a celle ci Tabulous.active

Je vous ajoute le code CSS on ne sait jamais


#wrapper {

	margin: 0 auto;
	margin-top: 100px;
}
#tabs,#tabs2,#tabs3,#tabs4,#tabs5 {
	width: 1700px;
	margin: 0 auto;
	margin-bottom: 40px;
}

#tabs li,#tabs2 li,#tabs3 li,#tabs4 li,#tabs5 li {
	float: left;
	margin-right: 2px;
}

#tabs li a,#tabs2 li a,#tabs3 li a,#tabs4 li a,#tabs5 li a {
	display: block;
	padding: 17px 30px;
	background: #CEE3F6;
	text-decoration: none;
	color: #FFFFFF; /* couleur du text de l'onglet non actif */
}

#tabs li a:hover,#tabs2 li a:hover,#tabs3 li a:hover,#tabs4 li a:hover,#tabs5 li a:hover {
	background: #CEE3F6;
}

#tabs_container {
	padding: 40px;
	overflow: hidden;
	position: relative;
	background: #81BEF7;  /* couleur de l'interieur de l'onglet actif */
}

#tabs_container div {
	margin-right: 40px;
}

.transition {
	-webkit-transition: all .3s ease-in-out;
	-moz-transition: all .3s ease-in-out;
	-o-transition: all .3s ease-in-out;
	-ms-transition: all .3s ease-in-out;
	transition: all .3s ease-in-out;

	-webkit-transition-delay: .3s;
	-moz-transition-delay: .3s;
	-o-transition-delay: .3s;
	-ms-transition-delay: .3s;
	transition-delay: .3s;
}

.make_transist {
	-webkit-transition: all .3s ease-in-out;
	-moz-transition: all .3s ease-in-out;
	-o-transition: all .3s ease-in-out;
	-ms-transition: all .3s ease-in-out;
	transition: all .3s ease-in-out;
}

.hidescale {
	-webkit-transform: scale(0.9);
	-moz-transform: scale(0.9);
	-o-transform: scale(0.9);
	-ms-transform: scale(0.9);
	transform: scale(0.9);
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
	filter: alpha(opacity=0);
	filter: alpha(opacity=0);
	opacity: 0;
}

.showscale {
	-webkit-transform: scale(1);
	-moz-transform: scale(1);
	-o-transform: scale(1);
	-ms-transform: scale(1);
	transform: scale(1);
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
	filter: alpha(opacity=100);
	opacity: 1;

	-webkit-transition-delay: .3s;
	-moz-transition-delay: .3s;
	-o-transition-delay: .3s;
	-ms-transition-delay: .3s;
	transition-delay: .3s;
}

.hideleft {
	-webkit-transform: translateX(-100%);
	-moz-transform: translateX(-100%);
	-o-transform: translateX(-100%);
	-ms-transform: translateX(-100%);
	transform: translateX(-100%);
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
	filter: alpha(opacity=0);
	opacity: 0;
}

.showleft {
	-webkit-transform: translateX(0px);
	-moz-transform: translateX(0px);
	-o-transform: translateX(0px);
	-ms-transform: translateX(0px);
	transform: translateX(0px);
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
	filter: alpha(opacity=100);
	opacity: 1;

	-webkit-transition-delay: .3s;
	-moz-transition-delay: .3s;
	-o-transition-delay: .3s;
	-ms-transition-delay: .3s;
	transition-delay: .3s;
}

.hidescaleup {
	-webkit-transform: scale(1.1);
	-moz-transform: scale(1.1);
	-o-transform: scale(1.1);
	-ms-transform: scale(1.1);
	transform: scale(1.1);
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
	filter: alpha(opacity=0);
	opacity: 0;
}

.showscaleup {
	-webkit-transform: scale(1);
	-moz-transform: scale(1);
	-o-transform: scale(1);
	-ms-transform: scale(1);
	transform: scale(1);
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
	filter: alpha(opacity=100);
	opacity: 1;

	-webkit-transition-delay: .3s;
	-moz-transition-delay: .3s;
	-o-transition-delay: .3s;
	-ms-transition-delay: .3s;
	transition-delay: .3s;
}

.hideflip {
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
	filter: alpha(opacity=0);
	opacity: 0;

	-webkit-transform: rotatey(-90deg) scale(1.1);
	-moz-transform: rotatey(-90deg) scale(1.1);
	-o-transform: rotatey(-90deg) scale(1.1);
	-ms-transform: rotatey(-90deg) scale(1.1);
	transform: rotatey(-90deg) scale(1.1);

	-webkit-transform-origin: 50% 50%;
	-moz-transform-origin: 50% 50%;
	-o-transform-origin: 50% 50%;
	-ms-transform-origin: 50% 50%;
	transform-origin: 50% 50%;
}

.showflip {
	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
	filter: alpha(opacity=100);
	opacity: 1;

	-webkit-transition-delay: .3s;
	-moz-transition-delay: .3s;
	-o-transition-delay: .3s;
	-ms-transition-delay: .3s;
	transition-delay: .3s;

	-webkit-transform: rotatey(0deg) scale(1);
	-moz-transform: rotatey(0deg) scale(1);
	-o-transform: rotatey(0deg) scale(1);
	-ms-transform: rotatey(0deg) scale(1);
	transform: rotatey(0deg) scale(1);

	-webkit-transform-origin: 50% 50%;
	-moz-transform-origin: 50% 50%;
	-o-transform-origin: 50% 50%;
	-ms-transform-origin: 50% 50%;
	transform-origin: 50% 50%;
}

.tabulous_active {
	background: #81BEF7 !important; /* couleur de l'onglet de l'interieur de l'onglet actif */
	color: #FFFFFF !important; /* couleur du texte de l'onglet actif */

}

.tabulousclear {
	display: block;
	clear: both;
}