VersionIntroductionInstallationLimitations du protocole "file"Questions fréquemment poséesSyntaxe, mots-clés et fonctions intégréesDistribution standardImplémentation de importPackages BrythonInterface avec le navigateur
Introduction - API DOM
Créer un document Accéder aux éléments Attributs, propriétés et méthodes Evénements Evénements souris Evénements clavier Evénements focus Evénements pour glisser-déposer Chaine de requête Interactions avec Javascript Modules intégrés propres à Brython
browser
browser.aio browser.ajax browser.html browser.local_storage browser.markdown browser.object_storage browser.session_storage browser.svg browser.template browser.timer browser.webcomponent browser.websocket browser.worker Widgets browser.widgets.dialog browser.widgets.menu interpreter javascript Travailler avec BrythonRecettes
Salut !
Insérer du contenu dans un élément Mise en forme HTML (gras, italique...) Table HTML Attacher / détacher des événements Gérer la sélection d'options dans un SELECT Glisser-déposer Obtenir le contenu d'un élément Lire le contenu d'un fichier Stocker des objets localement Exemple de onmouseover |
ProblèmeGlisser et déposer un élément sur la page webSolutionBrython implémente une API basée sur la spécification du HTML5 pour le glisser-déposer. Dans la forme basique présentée dans cet exemple, elle consiste à définir des fonctions de rappel pour 3 événements :
.bind(evenement,rappel)
Les fonctions de rappel prennent un seul argument, une instance de DOMEvent .
Pour communiquer des informations pendant l'opération de glisser-déposer,
cette instance possède un attribut data qui reçoit une valeur dans la
fonction de rappel associée à dragstart ; cette valeur est exploitée par la
fonction de rappel associée à drop pour identifier l'élement qui est en
train d'être déposé.
Dans l'exemple, quand l'objet déplaçable a été déposé, on ne peut plus le
déplacer ; pour cela, nous supprimons les fonctions associées à un evenement
sur cet objet par la méthode element.unbind(evenement)
zone de destination
objet déplaçable
from browser import document panel = document["panel"] # zone jaune source = document["source"] # zone rouge # on la place à (10, 10) du bord supérieur gauche du panel source.style.top = "{}px".format(10 + panel.abs_top) source.style.left = "{}px".format(10 + panel.abs_left) # rend la zone rouge déplaçable source.draggable = True dest = document["dest"] # zone verte # on la place à (10, 150) du bord supérieur gauche du panel dest.style.top = "{}px".format(10 + panel.abs_top) dest.style.left = "{}px".format(150 + panel.abs_left) # coordonnées de la souris relativement au bord supérieur gauche de l'objet # déplacé quand le glissement commence m0 = [None, None] def mouseover(ev): """Quand la souris passe sur l'objet déplaçable, changer le curseur.""" print("voilà la souris !") ev.target.style.cursor = "pointer" source.bind("mouseover", mouseover) def dragstart(ev): """Fonction appelée quand l'utilisateur commence à déplacer l'objet.""" global m0 # calcul des coordonnées de la souris # ev.x et ev.y sont les coordonnées de la souris quand l'événement est déclenché # ev.target est l'objet déplacé. Ses attributs "left" et "top" sont des entiers, # la distance par rapport aux bords gauche et supérieur du document m0 = [ev.x - ev.target.left, ev.y - ev.target.top] # associer une donnée au processus de glissement ev.dataTransfer.setData("text", ev.target.id) # permet à l'object d'être déplacé dans l'objet destination ev.dataTransfer.effectAllowed = "move" source.bind("dragstart", dragstart) def dragover(ev): """Fonction appelée quand l'objet déplaçable vient au-dessus de la zone de destination. """ ev.dataTransfer.dropEffect = "move" # il faut désactiver le comportement par défaut pour ce genre d'événement ev.preventDefault() dest.bind("dragover", dragover) def drop(ev): """Fonction attachée à la zone de destination. Elle définit ce qui se passe quand l'objet est déposé, c'est-à-dire quand l'utilisateur relâche la souris alors que l'objet est au-dessus de la zone. """ # récupère les données stockées dans drag_start (l'id de l'objet déplacé) src_id = ev.dataTransfer.getData("text") elt = document[src_id] # définit les nouvelles coordonnées de l'objet déplacé elt.style.left = "{}px".format(ev.x - m0[0]) elt.style.top = "{}px".format(ev.y - m0[1]) # ne plus déplacer l'objet elt.draggable = False # enlever la fonction associée à mouseover elt.unbind("mouseover") elt.style.cursor = "auto" ev.preventDefault() dest.bind("drop", drop) |