19-02-2016, 12:58 AM
(18-02-2016, 11:33 PM)Xenos a écrit : Si tu veux faire une version "mobile", les brouettes de JS t'obligent à trouver des brouettes de framework. Si tu te forces à coller aux standards purs, t'as juste *rien* à faire de plus que d'aller sur le site avec ton mobile.
Je n'ai rien contre le JS, c'est parfois adapté pour certaines features, mais si c'est pour recoder en JS des comportements de navigateur (ou des composantes de base des standards), alors c'est une perte de temps (au mieux), voire un massacre de l'ergonomie (au pire).
Je te conseille, par curiosité, de tester l'implémentation d'une single page app avec un framework javascript. Par exemple Mithril[1] qui est un peu tout-en-un. L'idée n'est pas d'avoir quatre frames en simultané sur ton écran mais par exemple de pouvoir jongler entre les quatre facilement et instantanément, n'ayant besoin de charger que des données.
On ne pense pas forcément en forme de frames. Par exemple, pour un jeu tu vas avoir une barre de boutons que tu vas pouvoir modifier (enlever des boutons, rajouter un compteur de temps, rétrécir sa taille, etc.) selon le contexte du jeu, sans recharger de frame ou faire de requête AJAX. Du coup c'est beaucoup plus simple en pensant toute sa vue en javascript plutot qu'en écrivant du HTML pour ensuite venir se rajouter par dessus en JS. par exmple avec Mithril ou Flux tu vas simplement écrire du code qui décrit ta vue et les bindings JS en fonction de l'état de ta page, l'état étant une simple donnée.
En gros :
vue = ƒ(état)
où ƒ
est une simple fonction, que tu peux choisir parmi un pool de fonctions.Je ne crois pas vraiment en l'idée d'implémenter un jeu avec une interface riche sans partir directement sur du JS. A contrario, pour un site de contenu, je partirais sur du HTTP pur genre HTML et liens qui chargent d'autres pages, et je rajouterais une couche très fine de JS totalement facultative.
Quant à l'implémentation hasardeuse d'une fonctionnalité native, justement les navigateurs exposent une API très pratique pour ne pas avoir à le faire. Typiquement, lorsque une autre route est appelée, l'appel à la fonction
history.pushState
permet d'ajouter une entrée dans l'historique, et c'est ensuite au navigateur de gérer précédent/suivant normalement.La touche backspace ou autres racourcis tant sur les navigateurs que sur les mobiles étant des raccourcis offerts par le navigateur pour jouer avec l'historique, ton code n'a donc pas à s'en soucier.
[1] http://mithril.js.org/