Envoyé par : demoni
Date : 02/07/2008 14:54
Bonjour,
Je suis en train de recréer un système de notifications pour firefox. En effet, celui existant est trop contraignant, on ne peut pas afficher tout ce que l'on souhaite dedans.
J'affiche donc des éléments d'interface dans la boite de notification, juste sous les onglets. Par contre, je cherche désespérément à créer un effet glissant lorsque les notifications sont affichés, tout comme le système de notifications original.
Si quelqu'un a une idée de comment faire? Merci d'avance.
Envoyé par : laurentj
Date : 16/07/2008 11:52
Salut,
Le web regorge de script javascript permettant de faire ça.. Le principe est simple : utilisation de setTimeout avec une fonction qui à chaque appel va augmenter la taille visible.
Sinon, regarde comment ils font dans firefox.
Envoyé par : demoni
Date : 16/07/2008 11:54
Oui, en effet, j'ai tout simplement copié la méthode que Firefox utilise pour faire l'effet glissant des notifications et cela fonctionne très bien.
Merci.
Envoyé par : demoni
Date : 16/07/2008 11:58
Pour ceux qui cherchent et qui souhaitent en être inspirés :
function _showNotification(aNotification, aSlideIn) { if (this._timer) { clearInterval(this._timer); if (this.currentNotification) { this.currentNotification.style.marginTop = "0px"; this.currentNotification.style.opacity = 1; } if (this._closedNotification) this._closedNotification.parentNode.removeChild(this._closedNotification); this._setBlockingState(this.currentNotification); } this.slideSteps = 15; var height = aNotification.boxObject.height; var change = height / this.slideSteps; if (aSlideIn) { if (this.currentNotification && this.currentNotification.boxObject.height > height) height = this.currentNotification.boxObject.height; this.currentNotification = aNotification; this._closedNotification = null; aNotification.style.removeProperty("position"); aNotification.style.removeProperty("top"); aNotification.style.marginTop = -height + "px"; aNotification.style.opacity = 0; } else { change = -change; this._closedNotification = aNotification; var notifications = this.allNotifications; var idx = notifications.length - 2; if (idx >= 0) this.currentNotification = notifications[idx]; else this.currentNotification = null; } var opacitychange = change / height; var self = this; var slide = function slideInFn(){ var done = false; var style = window.getComputedStyle(aNotification, null); var margin = style.getPropertyCSSValue("margin-top").getFloatValue(CSSPrimitiveValue.CSS_PX); if (change > 0 && margin + change >= 0) { aNotification.style.marginTop = "0px"; aNotification.style.opacity = 1; done = true; } else if (change < 0 && margin + change <= -height) { aNotification.style.marginTop = -height + "px"; done = true; } else { aNotification.style.marginTop = (margin + change).toFixed(4) + "px"; if (opacitychange) aNotification.style.opacity = Number(aNotification.style.opacity) + opacitychange; } if (done) { clearInterval(self._timer); self._timer = null; //if (self._closedNotification) // self._closedNotification.parentNode.removeChild(self._closedNotification); self._setBlockingState(self.currentNotification); } } this._timer = setInterval(slide, 50); }
function _setBlockingState(aNotification) { var isblock = aNotification && aNotification.priority == this.PRIORITY_CRITICAL_BLOCK; var canvas = this._blockingCanvas; if (isblock) { if (!canvas) canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var content = this.firstChild; if (!content || content.namespaceURI != XULNS || content.localName != "browser") return; var width = content.boxObject.width; var height = content.boxObject.height; content.collapsed = true; canvas.setAttribute("width", width); canvas.setAttribute("height", height); canvas.setAttribute("flex", "1"); this.appendChild(canvas); this._blockingCanvas = canvas; var bgcolor = "white"; try { var prefService = Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefBranch); bgcolor = prefService.getCharPref("browser.display.background_color"); var win = content.contentWindow; var context = canvas.getContext("2d"); context.globalAlpha = 0.5; context.drawWindow(win, win.scrollX, win.scrollY, width, height, bgcolor); } catch(ex) { }; } else if (canvas) { canvas.parentNode.removeChild(canvas); this._blockingCanvas = null; var content = this.firstChild; if (content) content.collapsed = false; } }
Envoyé par : laurentj
Date : 16/07/2008 12:14
N'oublie pas de respecter la licence du code source ;-) Si ce morceau de code provient de Firefox, le fichier dans lequel tu as copié doit être sous licence MPL.
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.