IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Navigation responsive javascript


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 31
    Points : 12
    Points
    12
    Par défaut Navigation responsive javascript
    Bonsoir,
    je debutte avec javascript et je suis entrain de realiser une navigation responsive pour les appareils mobile et j'ai suivi ce tutoriel

    http://toddmotto.com/building-an-htm...es-javascript/
    mon probléme et que j'aimerai bien séparé le script dans un fichier externe au lieu de le mettre dans une balise <script></script> et puis je fais l'appel de ce dernier dans ma page html comme suit
    <script type="text/javascript" src="script.js"></script>
    mais rien ne ce passe lors de l'execution malgré ça marche bien si je met le script au niveau de ma page html.voici le code

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!doctype html>
    <html>
    <head>
    	<link href="css/main.css" rel="stylesheet">
    	<link href="css/demo.css" rel="stylesheet">
    </head>
    <body>
    	<!-- Nav -->
    	<nav class="nav">
    		<ul class="nav-list">
    			<li class="nav-item"><a href="#">Home</a></li>
    			<li class="nav-item"><a href="#">About</a></li>
    			<li class="nav-item"><a href="#">Services</a></li>
    			<li class="nav-item"><a href="#">Portfolio</a></li>
    			<li class="nav-item"><a href="#">Testimonials</a></li>
    			<li class="nav-item"><a href="#">Contact</a></li>
    		</ul>
    	</nav>
    	<!-- /Nav -->
    </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    (function () {
    	// Create mobile element
    	var mobile = document.createElement('div');
    	mobile.className = 'nav-mobile';
    	document.querySelector('.nav').appendChild(mobile);
    	// hasClass
    	function hasClass(elem, className) {
    		return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
    	}
    	// toggleClass
    	function toggleClass(elem, className) {
    		var newClass = ' ' + elem.className.replace(/[\t\r\n]/g, ' ') + ' ';
    		if (hasClass(elem, className)) {
    		    while (newClass.indexOf(' ' + className + ' ') >= 0) {
    		        newClass = newClass.replace(' ' + className + ' ', ' ');
    		    }
    		    elem.className = newClass.replace(/^\s+|\s+$/g, '');
    		} else {
    		    elem.className += ' ' + className;
    		}
    	}
    	// Mobile nav function
    	var mobileNav = document.querySelector('.nav-mobile');
    	var toggle = document.querySelector('.nav-list');
    	mobileNav.onclick = function () {
    		toggleClass(this, 'nav-mobile-open');
    		toggleClass(toggle, 'nav-active');
    	};
    })();

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Tu as bien laissé la balise script au même endroit, après ton HTML ?
    One Web to rule them all

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    j'ai mis la balise script dans la section head

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Il ne faut pas.
    Si tu sais à quoi correspond la syntaxe (function () {...})(); (IIFE), tu sais alors que le code sera immédiatement exécuté, donc avant que le DOM ne soit créé. C'est pourquoi Sylvain t'indiquais de mettre la balise après le HTML.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Tu peux la laisser dans la HEAD, à condition de changer ton code de cette manière :

    remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (function () {
    ...
    })();
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    document.addEventListener('DOMContentLoaded', function() {
    ...
    });
    De cette manière, la fonction ne sera plus immédiatement invoquée mais attendra que le DOM est chargé. Mais le mieux reste de mettre tes scripts juste avant la fin de la balise </body>.
    One Web to rule them all

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo